以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"
}