我目前正在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'
有什么想法吗?
答案 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