错误:在Heroku中加载Express时找不到模块'./layer'

时间:2016-09-09 14:31:40

标签: node.js express heroku npm

我目前正在Heroku上构建一个Node.js Express应用程序。它在本地工作正常,但当我上传到Heroku时,我收到以下错误:

2016-09-09T14:14:46.606481+00:00 app[web.1]: [DEBUG] Loading modules...
2016-09-09T14:14:46.607904+00:00 app[web.1]: [DEBUG] Loading express...
2016-09-09T14:14:46.632062+00:00 app[web.1]: module.js:457
2016-09-09T14:14:46.632064+00:00 app[web.1]:     throw err;
2016-09-09T14:14:46.632065+00:00 app[web.1]:     ^
2016-09-09T14:14:46.632065+00:00 app[web.1]:
2016-09-09T14:14:46.632066+00:00 app[web.1]: Error: Cannot find module './layer'

当我查看本地node_modules时,文件node_modules\express\lib\router\layer.js就会出现。

然后我跑了heroku run bash并看到:

~/node_modules/express/lib/router $ ls
index.js  route.js

所以我跑:

~ $ rm -rf node_modules/
~ $ npm i
~ $ npm start

这一切都很好。但是退出heroku bash并停止工作。之后,如果我重新登录并运行npm start,它将再次失败并显示第一条消息:

Running bash on little-owl... up, run.6609
~ $ npm start

> little-owl@0.0.1 start /app
> node server.js

[DEBUG] Loading modules...
[DEBUG] Loading express...
module.js:457
    throw err;
    ^

Error: Cannot find module './layer'

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

Heroku不是VPS。当您heroku run bash时,您没有对应用的文件系统进行任何永久性更改。这一切都是在部署时在构建时完成的。

根据此处的症状,您的应用似乎在过去的某个时间检查过某些不完整的node_modules。首先,从git:

中删除node_modules
$ echo 'node_modules' >> .gitignore
$ git rm -r --cached node_modules
$ git commit -am 'ignore node_modules'

然后,禁用应用的缓存并推送:

$ heroku config:set NODE_MODULES_CACHE=false
$ git push heroku master