【问题标题】:Heroku does not read node versionHeroku 不读取节点版本
【发布时间】: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版本?

【问题讨论】:

    标签: json node.js heroku package.json


    【解决方案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>
                  

                  ??

                  【讨论】:

                    猜你喜欢
                    • 2017-12-17
                    • 2018-03-25
                    • 2019-08-25
                    • 2022-01-22
                    • 2020-01-24
                    • 2013-09-03
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多