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>