首页 > 解决方案 > Heroku 如何从 package.json 版本号崩溃?

问题描述

我正在使用 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 都可以使用,所以我认为没有脚本/引擎等不会是问题......也许这里的任何人都有想法是什么问题?

标签: javascriptgithubherokudiscord.js

解决方案


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


推荐阅读