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 版本号崩溃?的主要内容,如果未能解决你的问题,请参考以下文章
如何让 Heroku 识别子目录(不是根目录)中的 yarn.lock 或 package.json
我如何告诉 heroku 我的 server.js 和 package.json 在一个文件夹中?