【问题标题】:Node app can't find module when run on Heroku dyno在 Heroku dyno 上运行时节点应用程序找不到模块
【发布时间】:2018-02-21 05:29:28
【问题描述】:

我有一个 node.js 应用程序,一个 API,可与 heroku local 一起使用,但不能在远程测功机上运行。具体来说,它在构建后失败并显示以下消息:

2018-02-19T21:19:38.000000+00:00 app[api]: Build started by user ---
2018-02-19T21:20:01.874321+00:00 heroku[web.1]: State changed from crashed to starting
2018-02-19T21:20:01.588534+00:00 app[api]: Release v16 created by user ---
2018-02-19T21:20:01.588534+00:00 app[api]: Deploy c3f854a0 by user ---
2018-02-19T21:19:38.000000+00:00 app[api]: Build succeeded
2018-02-19T21:20:03.954335+00:00 heroku[web.1]: Starting process with command `npm start`
2018-02-19T21:20:05.841898+00:00 app[web.1]: [heroku-exec] Starting
2018-02-19T21:20:06.353423+00:00 app[web.1]: 
2018-02-19T21:20:06.353446+00:00 app[web.1]: > saasaato-backend@1.0.5 start /app
2018-02-19T21:20:06.353449+00:00 app[web.1]: > node dist/server.js
2018-02-19T21:20:06.353451+00:00 app[web.1]: 
2018-02-19T21:20:06.443156+00:00 app[web.1]: module.js:544
2018-02-19T21:20:06.443160+00:00 app[web.1]:     throw err;
2018-02-19T21:20:06.443161+00:00 app[web.1]:     ^
2018-02-19T21:20:06.443163+00:00 app[web.1]: 
2018-02-19T21:20:06.443165+00:00 app[web.1]: Error: Cannot find module '/app/dist/server.js'
2018-02-19T21:20:06.443169+00:00 app[web.1]:     at Function.Module._resolveFilename (module.js:542:15)
2018-02-19T21:20:06.443171+00:00 app[web.1]:     at Function.Module._load (module.js:472:25)
2018-02-19T21:20:06.443173+00:00 app[web.1]:     at Function.Module.runMain (module.js:682:10)
2018-02-19T21:20:06.443175+00:00 app[web.1]:     at startup (bootstrap_node.js:191:16)
2018-02-19T21:20:06.443177+00:00 app[web.1]:     at bootstrap_node.js:613:3
2018-02-19T21:20:06.448738+00:00 app[web.1]: npm ERR! code ELIFECYCLE
2018-02-19T21:20:06.449100+00:00 app[web.1]: npm ERR! errno 1
2018-02-19T21:20:06.450147+00:00 app[web.1]: npm ERR! saasaato-backend@1.0.5 start: `node dist/server.js`
2018-02-19T21:20:06.450299+00:00 app[web.1]: npm ERR! Exit status 1
2018-02-19T21:20:06.450518+00:00 app[web.1]: npm ERR! 
2018-02-19T21:20:06.450686+00:00 app[web.1]: npm ERR! Failed at the saasaato-backend@1.0.5 start script.
2018-02-19T21:20:06.450842+00:00 app[web.1]: npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
2018-02-19T21:20:06.458437+00:00 app[web.1]: 
2018-02-19T21:20:06.458601+00:00 app[web.1]: npm ERR! A complete log of this run can be found in:
2018-02-19T21:20:06.458706+00:00 app[web.1]: npm ERR!     /app/.npm/_logs/2018-02-19T21_20_06_451Z-debug.log
2018-02-19T21:20:06.518039+00:00 heroku[web.1]: Process exited with status 1
2018-02-19T21:20:06.535280+00:00 heroku[web.1]: State changed from starting to crashed

此应用程序之前的 heroku 版本可以运行,但我无法弄清楚出了什么问题。我尝试将 heroku 设置为不缓存任何文件、仔细检查节点和 npm 版本等。任何帮助将不胜感激!

【问题讨论】:

  • 我从 package.json 中的 { ..., "scripts": { "start": "node dist/server.js" }, ... } 和 Procfile 中的 web: npm start 开始。值得注意的是,在 package.json、Procfile、server.js 或 app.js 崩溃之前,我没有任何机会......
  • 我觉得是相对路径的问题,试试改脚本如下:{ ..., "scripts": { "start": "node ./dist/server.js" }, ... }
  • 谢谢,但它仍然以同样的方式失败......
  • @kgangadhar 我刚刚记得我已将/dist 添加到我的.gitignore 中。该应用程序现在可以在没有该行的情况下运行,即在我 git push heroku master 源代码以及在我的本地计算机上生成的 dist 文件夹之后。 Heroku 日志显示“构建成功”并且没有错误。你怎么看这个?
  • 根据您的启动命令,我可以说您的主文件 server.js 存在于 dist 文件夹中,并且启动您的应用程序是必须且应该的。由于您将其添加到 .gitignore 中,因此该文件夹和服务器文件未推送到 heroku,因此您收到此错误。这是主要原因。

标签: node.js heroku npm


【解决方案1】:

你的应用脚本如下:

"scripts": { 
   "start": "node dist/server.js" 
}

根据您的启动命令,我可以说您的主文件 server.js 存在于 dist 文件夹中,并且必须且应该启动您的应用程序。

由于您将其添加到 .gitignore 中,该文件夹和服务器文件未推送到 heroku,因此您收到此错误。这是主要原因。

.gitignore 主要用于避免将node_modules、unit_test 报告和覆盖率之类的文件以及日志文件推送到您的 git 存储库。到目前为止,您不应该添加导致此问题的主文件。有关.gitignore 文件的更多信息,请参阅此内容

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-13
    • 1970-01-01
    • 2014-10-21
    • 1970-01-01
    • 2019-01-21
    • 2014-04-20
    • 2020-08-19
    • 1970-01-01
    相关资源
    最近更新 更多