错误:找不到模块“ejs”,即使它已在 package.json 中列出

Posted

技术标签:

【中文标题】错误:找不到模块“ejs”,即使它已在 package.json 中列出【英文标题】:Error: Cannot find module 'ejs' even though it's listed in package.json 【发布时间】:2017-05-14 23:51:57 【问题描述】:

当我尝试在 app.js 文件中调用路由时,我的应用程序没有加载“EJS”模块,我想知道原因。

我的问题是 similar in scope to this one,但它有一些额外的皱纹,没有在答案中解决,所以我想我会完全把它变成一个新问题。

如果我像这样启动一个非常基本的app.js 文件并调用ejs,它会按预期工作并且不会引发错误。

APP.JS:

var express = require('express');
var app = express();

app.set('view engine', 'ejs');

app.get('/', function(req, res)
    res.send("Hello World");
    ).listen(3000, function()
    console.log("The port is now listening at 3000");
  );

但是,一旦我修改 app.js 以使用路由来呈现视图,我就会在标题中收到错误消息。

以下脚本提供了错误:

APP.JS:

var express = require('express');
var app = express();
var root = require('./routes/index');

app.set('view engine', 'ejs');
app.set('views', __dirname + '/views');
app.use(express.static(__dirname + '/public'));

app.use(root);

app.listen(3000, function()
console.log("The port is now listening at 3000");
);

module.exports = app;

我用来建立路由的 index.js 文件如下所示:

INDEX.JS:

var express = require('express');
var router = express.Router();

/* GET home page. */
router.get('/', function(req, res) 
res.render('index', 
  pageTitle: 'The Formula Generator',
  pageDescription: 'Easily manage and store your supplement formulas',
  pageID: 'home' );
);

module.exports = router;

EJS 已正确加载到我的 package.json 中,如下所示:

PACKAGE.JSON:

"dependencies": 
"body-parser": "~1.15.2",
"cookie-parser": "~1.4.3",
"debug": "~2.2.0",
"ejs": "^2.5.5",
"express": "~4.14.0",
"mongodb": "^2.2.16",
"monk": "^3.1.3",
"morgan": "~1.7.0",
"serve-favicon": "~2.3.0"
 ,

它也安装在我的 node_modules 文件夹中。

我的文件结构目前如下所示:

【问题讨论】:

【参考方案1】:

在项目的根目录上安装 express。

npm install express --save

【讨论】:

【参考方案2】:

app.js

var express = require('express');
var app = express();
var root = require('./routes/index');

app.set('view engine', 'ejs');
app.set('views', __dirname + '/views');
app.use(express.static(__dirname + '/public'));

root(app); // pass app to index

app.listen(3000, function()
console.log("The port is now listening at 3000");
);

module.exports = app;

index.js

var controller = function(app)
    app.get('/', function(req, res) 
    res.render('index', 
      pageTitle: 'The Formula Generator',
      pageDescription: 'Easily manage and store your supplement formulas',
      pageID: 'home' );
    );
;
module.exports = controller;

package.json


  "name": "test",
  "version": "0.0.1",
  "private": true,
  "scripts": 
    "start": "node app.js"
  ,
  "dependencies": 
    "express": "3.2.6",
    "ejs": "*"
  

【讨论】:

嗨 Sumeet,谢谢您的回答。但是,我仍然收到相同的错误消息。我开始认为问题在于我的计算机上的系统变量设置不正确,因为这看起来确实是一个应该可以工作的简单程序。有什么想法吗? npm install ejs 为你安装 ejs 了吗?@JonathanBechtel 你能告诉我们错误堆栈跟踪你得到了什么@JonathanBechtel 我刚刚在我的根目录中执行了一个 npm install express,这对我来说是成功的。我不确定为什么这是问题的原因,因为我使用“Hello World”运行 express 并且成功了,但解决了问题。 伟大的@JonathanBechtel

以上是关于错误:找不到模块“ejs”,即使它已在 package.json 中列出的主要内容,如果未能解决你的问题,请参考以下文章

Webpack + Express + EJS:错误:找不到模块“。”

在 opentok 示例上找不到模块“ejs”

在 SwiftUI 范围内找不到“实体”

“Non-nullable field is uninitialized”的编译器错误,即使它已在 InitializeComponents 函数中初始化

Meteorjs React “未捕获的错误:找不到模块‘/imports/ui/app’”

self.performSegue 找不到storyboard-segue-ID,即使它已被命名