错误:找不到模块“pug”

23

这是我的index.js文件:

const express = require('express')
const app = express()

app.set('views', __dirname + '/views');
app.set('view engine', 'pug')

app.get('/', function (req, res) {
  res.render('index', { title: 'Hey', message: 'Hello there!' })
})


app.listen(3333, function () {
  console.log('Example app listening on port 3333!')
})

index.pug 文件:

html
  head
    title= title
  body
    h1= Hello

package.json 文件:

{
  "name": "@npm-private/pug_with_node",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "express": "^4.15.3",
    "jade": "^1.11.0",
    "pug": "^2.0.0-rc.2"
  }
}

当我运行我的服务器文件时,它显示了一个错误。事实上,我安装了pug和jade两个npm模块:

Error: 找不到模块 'pug' at Function.Module._resolveFilename (module.js:485:15) at Function.Module._load (module.js:437:25) at Module.require (module.js:513:17) at require (internal/module.js:11:18) at new View (/home/software/node_modules/express/lib/view.js:80:30) at Function.render (/home/software/node_modules/express/lib/application.js:570:12) at ServerResponse.render (/home/software/node_modules/express/lib/response.js:971:7) at /home/software/Harsh Patel/pug_with_node/index.js:8:7 at Layer.handle [as handle_request] (/home/software/node_modules/express/lib/router/layer.js:95:5) at next (/home/software/node_modules/express/lib/router/route.js:137:13)


1
你用什么命令安装了这两个模块? - Syntactic Fructose
package.json在哪里?你执行了npm install吗? - Arpit Solanki
1
请确保你的 package.json 文件中包含了 pug - Ved
1
我在我的 package.json 文件中有一个 Pug。 - Harsh Patel
1
我也添加了package.json文件。 - Harsh Patel
显示剩余6条评论
15个回答

24

尝试添加这行代码

app.engine('pug', require('pug').__express)

之前

app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');

这个对我来说解决了同样的问题!


不好意思,我无法解释!我用 express 和 pug 做了更多的项目,再也没有遇到那个错误了。事实上,我不再使用这一行代码 app.engine('pug', require('pug').__express) 了。 - Sergi Nadal
2
我所需要做的就是在 package.json 文件的 dependencies 中添加 "pug": "^2.0.3" 即可... - Ronnie Royston
救命稻草!对我来说,这是在使用webpack编译服务器时开始出现的(我使用__non_webpack_require__("pug").__express来保留Node require)。 - Dominic

19

如果全局和本地的模块安装不匹配,即使您已经安装了所有模块,您也会遇到此问题。我建议您通过在package.json中包含依赖项来将所有内容安装到项目本地。

npm install --save express jade pug

1
但是我在本地和全局使用的是同一个版本。 - Harsh Patel
@HarshPatel 我建议你从package.json中删除"dependencies",然后使用命令 npm install --save express jade pug 重新安装。 - Gopesh Sharma
3
为什么要同时安装jadepugjade不是pug的旧版本吗? - leviathanbadger
2
据我所知,Jade不得不更名为Pug,因为商标纠纷。我看不出安装它们两个的理由。 - Deane
这个解决方案对我有用。点赞了。(我在命令行中排除了“jade”,但仍然...) - IllvilJa

5
最简单的解决方法是将pug作为开发依赖项进行安装:npm i -D pug

5

在我尝试了不同的方法后,我的理解是根据官方文档,express默认使用app.engine()函数,其中回调函数需要遵循.__express语法来针对'pug'模板。

因此,在以下代码中:

app.engine('pug', require('pug').__express)

将'pug'作为第一个参数传递给app.engine()函数,然后使用require('pug').__express作为回调函数。

在此之前:

app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'pug');

对我有效。


3

运行:npm install express 对我起作用了。

我忘记在本地安装express了。

同时确保你已经安装了pug(运行:npm i pug)。


更多说明:

在我的系统中,即使我没有本地安装它(没有运行npm install express),express也能工作。因此,express找不到本地的pug模块,因为它是从其他地方运行的。

请注意,如果你的依赖中有express,这并不意味着你已经安装了它。运行npm install以确保所有依赖项都已安装。


2
运行以下命令:
  1.npm remove pug express

  2.npm install pug express

这将解决问题。

2
安装
npm i pug

放置
app.engine('pug', require('pug').__express);

之前

app.set('views', path.join(__dirname, 'views'));
app.set('view engine','pug');



这个在 @recherche-shafeeq 那里起作用了,但是能否请您解释一下为什么需要它才能顺利运行?我查看了其他在线资源,但它们的解释不够清晰。 - Ekanem Eno
@Ekanem Eno 因为要运行 pug 代码,你需要先安装 pug 引擎,就像 nodejs 安装为 JavaScript 的运行时环境一样。请参考 pug 文档以了解什么是 pug https://pugjs.org/api/getting-started.html - recherche-shafeeq

0

请确保在您的package.json文件中,express和pug都被列为依赖项

"dependencies": {
    "esm": "^3.2.25",
    "express": "^4.18.1",
    "mysql2": "^2.3.3",
    "pug": "^3.0.2",
    "sequelize": "^6.21.2"
},

0

0

如果您正在使用Nodejs express框架,那么这非常简单。您可以按照以下任何选项进行操作:

  1. 如果您已经全局安装了pug(例如添加-g),则请在项目中再次安装pug(本地npm install pug)。

  2. 如果第一种方法仍然无法正常工作,则请在package.json文件中,在“express”:“^4.17.1”之后的依赖对象中添加以下行。

"pug": "^3.0.0"

对我来说,第一种方法有效,因为如果您遵循第一种方法,则第二种方法将自动完成。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接