Heroku 不读取节点版本

Posted

技术标签:

【中文标题】Heroku 不读取节点版本【英文标题】:Heroku does not read node version 【发布时间】:2016-01-28 01:35:32 【问题描述】:

我有一个想要在 Heroku 上托管的 Node 项目。我在 package.json(位于根目录)中明确定义了 node 和 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中读取node和npm版本?

【问题讨论】:

【参考方案1】:

@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

【讨论】:

【参考方案2】:

这对我有用 - 确保您确实已将这些更改提交到 Git,并将存储库推送到 Heroku。您可能还想为您的 Heroku 应用指定准确的 Node 和 NPM 版本号。

虽然这将适用于您指定的变量版本,但不建议这样做,因为版本中的微小更改可能会给您带来问题。

作为参考,这里还有关于指定 Node.js 运行时的 Heroku 文档:https://devcenter.heroku.com/articles/nodejs-support#node-js-runtimes

【讨论】:

【参考方案3】:

可能你的master分支不是没有更新的分支,尝试将你要部署的分支合并到master中以便使用:

git push heroku master

【讨论】:

【参考方案4】:

不要在版本上给出“x”

 "node": "0.12.x",
 "npm": "2.5.x"

写完整版。 例如。

 "node": "0.12.0",
 "npm": "2.5.0"

【讨论】:

【参考方案5】:

我尝试了其他解决方案,但对我不起作用。但是,通过更改 package.json 中的 name 字段,它起作用了:

发件人:


  ...
  "name": "foo"
  ...

收件人:


  ...
  "name": "bar"
  ...

备选方案 2

当我不得不在另一台计算机上执行相同操作时,它不起作用,但我尝试删除 package.json,从头开始重新创建它,然后由于某些奇怪的原因(文件元数据?)起作用:

$ rm package.json
$ npm init

【讨论】:

【参考方案6】:

确保 lockfile 是最新的

要更新package-lock.json,请运行npm install 并将对文件的更改签入到git。

那么,git add . &amp;&amp; git commit -m "update pkg-lock" &amp;&amp; git push heroku master

【讨论】:

【参考方案7】:

在我的情况下,问题在于 package.json,由于一些手动更改而错过了,所以 恢复到旧版本的 repo 解决了我的问题。

【讨论】:

【参考方案8】:

正如其他人所说,我将版本添加到 package.json 中,它对我有用。如果没有指定,这些版本是从 Heroku 在构建期间使用的默认值引用的:

"engines": 
"node": "14.18.3",
"npm": "6.14.15"

,

另外,我建议通过 CLI 将此设置添加到您的应用中以获得更多输出,这确实很有帮助:

heroku config:set NPM_CONFIG_LOGLEVEL=verbose --app=<your_app_name>

??

【讨论】:

以上是关于Heroku 不读取节点版本的主要内容,如果未能解决你的问题,请参考以下文章

切换节点版本以在 heroku 上构建

Heroku:将节点更新到最新版本

Heroku local 不读取我的 .env 文件

ruby 版本的 Gitlab dpl 问题

Heroku无法运行节点ES6代码

出现错误 - PG::UndefinedColumn(错误:使用 postgres 版本 13.3 的 heroku 上不存在列 d.adsrc