Heroku + 节点:找不到模块错误
Heroku + Node: Cannot find module error
我的节点应用程序在本地运行良好,但在部署到 Heroku 时遇到错误。该应用程序在/models
文件夹中使用Sequelize,其中包含index.js
,Company.js
和Users.js
。在本地,我能够在/models/index.js
使用以下代码导入模型:
// load models
var models = [
'Company',
'User'
];
models.forEach(function(model) {
module.exports[model] = sequelize.import(__dirname + '/' + model);
});
这工作正常,但是,当我部署到 Heroku 时,应用程序崩溃并显示以下错误:
Error: Cannot find module '/app/models/Company'
at Function.Module._resolveFilename (module.js:338:15)
at Function.Module._load (module.js:280:25)
at Module.require (module.js:364:17)
at require (module.js:380:17)
at module.exports.Sequelize.import (/app/node_modules/sequelize/lib/sequelize.js:219:24)
at module.exports.sequelize (/app/models/index.js:60:43)
at Array.forEach (native)
at Object.<anonymous> (/app/models/index.js:59:8)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
Process exited with status 8
最初我认为这是由于区分大小写(本地 mac vs heroku linux),但我移动了文件,进行了 git 提交,然后移回并再次提交以确保Company.js
在 git 存储库中大写。这并没有解决问题,我不确定问题可能是什么。
该问题是由于区分大小写和文件命名造成的。Mac OS X不区分大小写(但可以识别),而Heroku基于Linux并且区分大小写。通过从我的终端运行heroku run bash
,我能够看到/models
文件夹如何出现在 Heroku 的文件系统上。解决方案是将本地系统上的User.js
和Company.js
重命名为新的临时文件,将更改提交到 git,然后重命名回 User.js
并Company.js
注意大写的第一个字母,然后通过 git 再次提交更改。以前我曾尝试将文件直接从 user.js
重命名为 User.js
和 company.js
重命名为 Company.js
但 git 提交和区分大小写的文件名更改并未反映在 Heroku 上。
我看不到确切的修复程序,但是您可以通过运行heroku run bash
登录Heroku实例,然后运行node
输入REPL,并尝试直接要求路径来自己解决。
,这是由我不小心包含在 .gitignore 中的文件夹引起的!
我遇到了这样的错误,原因是我将模块重命名module.js
以Module.js
并且 Heroku 缓存与名称冲突。必须禁用模块缓存以避免此类错误:
$ heroku config:set NODE_MODULES_CACHE=false
资料来源:https://help.heroku.com/TO64O3OG/cannot-find-module-in-node-js-at-runtime
不确定这是否与此处描述的问题相同,但对我来说,我的require("dotenv").config()
不受代码运行环境的限制,因此 Heroku 找不到它,因为它是作为devDependency
安装的。
修复:
if (process.env.NODE_ENV !== "production") {
require("dotenv").config();
}
我的一个文件在本地有一个小写名称,需要小写。
const Product = require('../models/product');
在 git 存储库中,它是大写的。
'../models/Product'
服务器试图要求一个不存在的文件。我不得不使用 git mv
在本地重命名文件,然后重新上传它以解决问题。
对我来说,我只是从 Heroku 中删除了旧应用程序并通过 Heroku 网络创建了新应用程序,然后将代码推送到较新的应用程序,然后它就起作用了。
我改变的是:
- 文件名是检查权限,我将其更改为检查权限,然后托管。发生错误。
- 然后还原更改并托管。这次效果很好。
我遇到了同样的问题,并使用 dockerizing 我的应用程序解决了。
- 从节点创建 dockerFile
- 将 Heroku Stack 设置为 docker
- 部署
编号 : https://devcenter.heroku.com/categories/deploying-with-docker
- 错误:$injector:modulerr模块错误(我的第一个SPA应用程序)
- 因果报应-找不到模块:错误:无法解析模块'scs'
- NgRoute未加载(模块错误)
- AngularJS错误:$injector:modulerr我的浏览器窗口中出现模块错误
- 无法实例化Angular js中的模块错误
- AngularJS打字稿从模块错误导出类
- AngularJS 1.3 - 错误:错误:modulerr 模块错误(使用 ng-view,$routeProvide
- AngularJS - $injector:modulerr 模块错误在 angular.js:36.
- 角度 JavaScript 缩小导致错误:$injector:modulerr 模块错误
- 角度$injector:模块rr模块错误
- JS2咖啡投掷找不到模块错误
- Heroku + 节点:找不到模块错误
- 木偶模块错误
- 角度错误:$injector:模块rr模块错误
- "现在无法切换到旧模式“-tls.connect函数中出现Node.JS apn模块错误
- 角度模块错误
- 在node.js下运行UglifyJS生成找不到模块错误
- AngularJS上不断出现注入模块错误
- AngularJS 1.4.8$injector:Modulerr模块错误
- sitefinity 6-事件模块错误javascript