Heroku 不读取节点版本
Heroku does not read node version
我有一个要在 Heroku 上托管的 Node 项目。我在 package.json(位于根目录)中明确定义了节点和 npm 版本,如下所示:
{
"name": "*********",
"version": "0.0.0",
"private": true,
"engines": {
"node": "0.12.x",
"npm": "2.5.x"
},
"scripts": {
"start": "node ./bin/www"
},
"dependencies": {
"body-parser": "^1.13.3",
...
}
但是,当我尝试将应用程序推送到 heroku 时
git push heroku master
Heroku 尝试构建应用程序,但它似乎无法读取节点和 npm 版本。这是我得到的回复。
remote: -----> Installing binaries
remote: engines.node (package.json): unspecified
remote: engines.npm (package.json): unspecified (use default)
remote:
remote: Resolving node version (latest stable) via semver.io...
remote: Downloading and installing node 4.2.1...
remote: Using default npm version: 2.14.7
为什么 heroku 不从 package.json 读取节点和 npm 版本?
这对我有用——确保您确实已将这些更改提交给 Git,并将存储库推送到 Heroku。您可能还想为您的 Heroku 应用程序指定确切的节点和 NPM 版本号。
虽然这将适用于您指定的可变版本,但不推荐这样做,因为版本中的小改动可能会给您带来问题。
作为参考,这里还有关于指定 Node.js 运行时的 Heroku 文档:https://devcenter.heroku.com/articles/nodejs-support#node-js-runtimes
@rdegges 是正确的 package.json 没有正确地提交给 Heroku。因此,出于某种原因,仅遵循 Heroku 说明对我不起作用。这是我必须做的才能让它发挥作用。
git clone <my git project>
heroku create <app name>
#remove package.json
mv package.json tmp_package.json
git add package.json
git commit -m "removed package.json"
#re-add package.json
mv tmp_package.json package.json
git add package.json
git commit -m "re-added package.json"
git push heroku master
我尝试了其他解决方案,但对我没有用。但是,通过更改 package.json 中的名称字段,它起作用了:
发件人:
{
...
"name": "foo"
...
}
收件人:
{
...
"name": "bar"
...
}
备选方案 2:
当我不得不在我的另一台计算机上做同样的事情时,它不起作用,但我尝试删除 package.json
,从头开始重新创建它,然后由于一些奇怪的原因(文件元数据? ):
$ rm package.json
$ npm init
可能你的master分支不是分支没有更新,尝试将你要部署的分支合并到master中使用:
git push heroku master
确保 lockfile 是最新的
为了更新 package-lock.json
、运行 npm install
并将对文件的更改签入 git。
然后,git add . && git commit -m "update pkg-lock" && git push heroku master
在我的案例中,问题出在 package.json,由于一些手动更改,它被遗漏了,所以 恢复到旧版本的 repo 解决了我的问题。
不要在版本上给'x'
"node": "0.12.x",
"npm": "2.5.x"
写完整版。
例如
"node": "0.12.0",
"npm": "2.5.0"
我将版本添加到 package.json 正如其他人提到的那样,它对我有用。如果指定 none,这些版本是从 Heroku 在构建期间使用的默认值引用的:
"engines": {
"node": "14.18.3",
"npm": "6.14.15"
},
此外,我建议通过 CLI 将此设置添加到您的应用程序以获得更多输出,这确实有帮助:
heroku config:set NPM_CONFIG_LOGLEVEL=verbose --app=<your_app_name>
我有一个要在 Heroku 上托管的 Node 项目。我在 package.json(位于根目录)中明确定义了节点和 npm 版本,如下所示:
{
"name": "*********",
"version": "0.0.0",
"private": true,
"engines": {
"node": "0.12.x",
"npm": "2.5.x"
},
"scripts": {
"start": "node ./bin/www"
},
"dependencies": {
"body-parser": "^1.13.3",
...
}
但是,当我尝试将应用程序推送到 heroku 时
git push heroku master
Heroku 尝试构建应用程序,但它似乎无法读取节点和 npm 版本。这是我得到的回复。
remote: -----> Installing binaries
remote: engines.node (package.json): unspecified
remote: engines.npm (package.json): unspecified (use default)
remote:
remote: Resolving node version (latest stable) via semver.io...
remote: Downloading and installing node 4.2.1...
remote: Using default npm version: 2.14.7
为什么 heroku 不从 package.json 读取节点和 npm 版本?
这对我有用——确保您确实已将这些更改提交给 Git,并将存储库推送到 Heroku。您可能还想为您的 Heroku 应用程序指定确切的节点和 NPM 版本号。
虽然这将适用于您指定的可变版本,但不推荐这样做,因为版本中的小改动可能会给您带来问题。
作为参考,这里还有关于指定 Node.js 运行时的 Heroku 文档:https://devcenter.heroku.com/articles/nodejs-support#node-js-runtimes
@rdegges 是正确的 package.json 没有正确地提交给 Heroku。因此,出于某种原因,仅遵循 Heroku 说明对我不起作用。这是我必须做的才能让它发挥作用。
git clone <my git project>
heroku create <app name>
#remove package.json
mv package.json tmp_package.json
git add package.json
git commit -m "removed package.json"
#re-add package.json
mv tmp_package.json package.json
git add package.json
git commit -m "re-added package.json"
git push heroku master
我尝试了其他解决方案,但对我没有用。但是,通过更改 package.json 中的名称字段,它起作用了:
发件人:
{
...
"name": "foo"
...
}
收件人:
{
...
"name": "bar"
...
}
备选方案 2:
当我不得不在我的另一台计算机上做同样的事情时,它不起作用,但我尝试删除 package.json
,从头开始重新创建它,然后由于一些奇怪的原因(文件元数据? ):
$ rm package.json
$ npm init
可能你的master分支不是分支没有更新,尝试将你要部署的分支合并到master中使用:
git push heroku master
确保 lockfile 是最新的
为了更新 package-lock.json
、运行 npm install
并将对文件的更改签入 git。
然后,git add . && git commit -m "update pkg-lock" && git push heroku master
在我的案例中,问题出在 package.json,由于一些手动更改,它被遗漏了,所以 恢复到旧版本的 repo 解决了我的问题。
不要在版本上给'x'
"node": "0.12.x",
"npm": "2.5.x"
写完整版。 例如
"node": "0.12.0",
"npm": "2.5.0"
我将版本添加到 package.json 正如其他人提到的那样,它对我有用。如果指定 none,这些版本是从 Heroku 在构建期间使用的默认值引用的:
"engines": {
"node": "14.18.3",
"npm": "6.14.15"
},
此外,我建议通过 CLI 将此设置添加到您的应用程序以获得更多输出,这确实有帮助:
heroku config:set NPM_CONFIG_LOGLEVEL=verbose --app=<your_app_name>