Heroku 如何从 package.json 版本号崩溃?

Posted

技术标签:

【中文标题】Heroku 如何从 package.json 版本号崩溃?【英文标题】:How can Heroku crash from a package.json version number? 【发布时间】:2020-05-23 04:03:55 【问题描述】:

我正在使用 GitHub 在 Heroku 上运行 Discord 机器人。在某个时候,Heroku 在启动我的应用程序时突然崩溃了。构建进行得很好,但它在启动时找不到我的任何依赖项(在第一个依赖项上崩溃,但后来发现它没有所有依赖项)。当使用 Heroku 的控制台(heroku run npm install discord.js 等)安装我的依赖项然后启动应用程序时,很明显 Heroku 没有安装依赖项。

在一次更改一个文件然后再次部署时,我终于找到了罪魁祸首:将 package.json 中的版本号更改为 3.7。 3.6.4 很好(以前的版本),3.7 崩溃了,恢复到 3.6.4(只是数字!)或跳到 3.7.1 修复了它。现在我想我的问题是,package.json 中的不同版本号如何在需要其模块时使应用程序崩溃?

只是为了显示它实际上只是版本号,这是我的 package.json:


  "name": "myapp",
  "version": "3.7",
  "description": "",
  "main": "index.js",
  "scripts": 
    "test": "echo \"Error: no test specified\" && exit 1"
  ,
  "keywords": [],
  "author": "author",
  "license": "ISC",
  "dependencies": 
    "discord.js": "^11.5.1",
    "find": "^0.3.0",
    "firebase-admin": "^8.9.2",
    "fs": "0.0.1-security",
    "python-shell": "^1.0.8"
  

我就是想不通。是的,我知道这不是最干净的 package.json,但它之前从版本 0 到 3.6.4 都可以使用,所以我认为没有脚本/引擎等不会是问题......也许这里的任何人都有知道问题出在哪里?

【问题讨论】:

您是否查阅了日志以了解为什么它崩溃了? 我做到了,我现在无法访问它们,但基本上它说没有为每个依赖项找到模块。如果我在本地删除 node_modules 然后尝试运行该程序,我认为它与我看到的相符。我看不出不同的版本号会如何导致缓存被擦除......(因为每次构建都是成功的 - 或者可能是因为版本号它以某种方式根本没有为依赖项运行 npm install ?) 【参考方案1】:

我自己偶然发现了答案。版本号使用semver syntax,它需要三个部分,用点分隔。在本地运行它 Node 似乎并不真正关心这种语法,但显然 Heroku 关心。 当语法不正确时,Heroku 可能不使用 package.json 文件,因此在构建期间不会安装依赖项。我想我很幸运,之前从未部署过一个版本号只有两个部分的版本。谢谢,很抱歉问了一个问题,如果我再想一想,我会找到答案的。

【讨论】:

我明天会测试一下,看看 '3.7.0' 是否有效。如果是,我会将其标记为正确答案。

以上是关于Heroku 如何从 package.json 版本号崩溃?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 package.json 中为包提供自定义 url

如何让 Heroku 识别子目录(不是根目录)中的 yarn.lock 或 package.json

我如何告诉 heroku 我的 server.js 和 package.json 在一个文件夹中?

推送到 Heroku 被拒绝,破坏 package.json

package.json脚本在heroku上失败

推送到 Heroku 时出错:找不到模块“node-linux-x64/package.json”