以Heroku平台的Rails + Node.js项目中,指定Node版本的方法是什么?(2021年)

导入

構築了一个Rails应用程序并创建了一个为webpacker添加了Node.js的应用程序时,我注意到Node的版本是12系列。由于当前的LTS版本是14系列,因此在开发环境和生产环境之间存在差异,我不希望在环境差异中遇到问题,所以我开始探索如何升级Heroku端的Node版本。

轻轻进行搜索,经常会找到使用Heroku Buildpacks的内容。

公式文档

然而,即使查看上述内容,也没有提供指定版本的具体方法的说明。

从搜索的结果看,据说在 package.json 中添加版本号可以指定版本。

  "engines": {
    "node": "14.17.2",
    "npm": "6.14.13"
  }

然而,即使在Rails应用中进行此操作并推送,

remote:        error app@1.0.0: The engine "node" is incompatible with this module. Expected version "14.17.2". Got "12.16.2"
remote:        error Found incompatible module.

然后,离开。

总之

即使引言很冗长,但结论是如下所述的。
出现上述情况有几个原因。

$ heroku buildpacks
=== dev-playrooms-free Buildpack URLs
1. heroku/ruby
2. heroku/nodejs

在Heroku中运行heroku buildpacks命令

    • 2にnodeが来ている

 

    そもそもnodejsが無い

按照以上模式部署失败。

解决方案 (jiě jué àn)

    • Herokuのアプリ設定を開く

 

    • Settingsタブを開く

 

    • Buildpacksの項目で add buildpacks でnodejsを追加する

 

    ここの順番がデプロイの順番に影響するのでnodejsを一番上に持ってくる

根据package.json文件中指定的版本,一旦部署完成,似乎会升级到nodejs的对应版本。

废话不多说

remote:        engines.node (package.json):  14.17.2
remote:        engines.npm (package.json):   6.14.13
remote:        engines.yarn (package.json):  unspecified (use default)

看起来,在engines中可以指定node,npm和yarn的版本。

然后,在本地使用Docker构建时,由于Node版本升级,导致Yarn出现错误。
因此,进行了以下配置。

  "engines": {
    "node": "14.x",
    "npm": "6.x",
    "yarn": "1.x"
  }