javascript - 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 都可以使用,所以我认为没有脚本/引擎等不会是问题......也许这里的任何人都有想法是什么问题?
解决方案
我自己偶然发现了答案。版本号使用semver 语法,需要三个部分,用点分隔。在本地运行它 Node 似乎并不真正关心这种语法,但 Heroku 显然关心。当语法不正确时,Heroku 可能不使用 package.json 文件,因此在构建期间不会安装依赖项。我想我很幸运,以前从未部署过一个版本号只有两个部分的版本。谢谢,很抱歉问了一个问题,如果我再想一想,我会找到答案的。
推荐阅读
- mod-fcgid - 部分结果有效但处理不完整 ERROR
- node.js - 嵌入 discord.js v12 中的 Markdown
- sql - 如何在 plsql 开发人员工具命令窗口中创建假脱机文件
- swift - 如何使用 cellWillDisplay/scrollViewDidScroll 更新 API 获取数据?迅速
- node.js - Mongoose 不保存更改 (updateOne)
- python-imaging-library - 如何通过压缩将 PDF 文件转换为 TIFF 文件(第 4 组压缩)
- c# - 为什么 db.savechanges 也存储旧记录?
- apache-kafka - 卡夫卡消费者没有收到任何消息
- python - 单元测试中的“从未等待”警告
- java - 无法对 ArrayList 执行操作