Node.jsアプリケーションをそのままデプロイしようとすると以下の警告が出ます。
**WARNING** Node version not specified in package.json or .nvmrc. See: http://docs.cloudfoundry.org/buildpacks/node/node-tips.html
Attempting to install: 10.24.0
package.json
か.nvmrc
に記述しろと書いてありますね。
Support .nvmrc file as an alternative to engine.version setting in package.json
前に書いた記事ではpackage.json
のenginesに記載するやり方でしたが、今回は.nvmrc
に記述します。
.nvmrcを作成してデプロイ
今更ですがnvmを内部で使ってたんですね。
macなどの場合はプロジェクトのルートで以下を実行します。
$ node -v >> .nvmrc
これで.nvmrc
が作成されてローカルのバージョンが.nvmrc
に記載されます。
ただ最新は動かない場合が多い
先程のコマンドを実施した.nvmrc
の中身はv16.0.0
でした。
v16.0.0
この状態でデプロイしたら以下のエラーが発生
**ERROR** Unable to install node: no match found for 16.0.0 in [10.23.3 10.24.0 12.20.2 12.21.0 14.15.5 14.16.0 15.11.0 15.12.0]
2021-05-04T02:26:19.14+0900 [STG/0] ERR Failed to compile droplet: Failed to run all supply scripts: exit status 14
まぁつまりv15.12.0までしか対応してないよとのことです。
v15.12.0
と変更してデプロイしなおすとエラー回避できます。
時期によって対応状況は違うので、まずは最新版でデプロイして出たエラーメッセージにどのバージョンで対応済みかを知るのが良いかもしれません。
最新を使いたい時はbuildpacks指定の方法も
Cloud Foundry(IBM Cloud)でNode.jsの最新バージョンを利用するの記事にあるbuildpacksでURL指定などをすると最新が使えるかもしれません。
所感
package.jsonのenginesに指定していると他の環境で利用しようとした時や利用パッケージによって変な挙動が発生することがあるので、pacakge.jsonのenginesに指定よりは楽な印象です。
個人的に今後も触ることがあれば.nvmrc
に記載の方を選ぶ気がします。