チームでフロントの開発する時に node のバージョンが異なっているとインストールされるパッケージのバージョンとか依存とかで面倒なことになる可能性があるので揃えておくのが良いと思っています。
〇〇のバージョンをインストールしてください。とお願いしても確実性がないので極力仕組みで解決したい。
node.js のバージョンを管理できる nodenv の導入
追記 node.js のバージョン管理を Volta に乗り換えました
nodenv の導入方法
homebrew で anyenv をインストールして anyenv 経由で nodenv をインストールします
$ brew install anyenv $ echo 'eval "$(anyenv init -)"' >> ~/.zshrc $ anyenv init $ exec $SHELL -l # nodenv のインストール $ anyenv install nodenv $ exec $SHELL -l $ nodenv versions * system # nodenv のアップデートを楽にするライブラリを導入 $ mkdir -p $(anyenv root)/plugins $ git clone https://github.com/znz/anyenv-update.git $(anyenv root)/plugins/anyenv-update # anyenv 関連をまとめてアップデート $ anyenv update
cf.
- 環境構築 macOS Big Sur : nodenv で node.js 環境をクリーンインストールしたメモ - かもメモ
- nodenv でインストールしたいバージョンが表示されない時にやること - かもメモ
nodenv でディレクトリのバージョンを指定する
$ cd project_dir $ nodenv local 14.17.6
プロジェクトのディレクトリに .node-version
というファイルが作成されるので、git commit してプロジェクトに加える。
.node-version
のファイルが有る時に、nodenv が導入された環境で指定外の node のバージョンで node コマンドを実行すると、.node-version
で指定されたバージョンをインストールするようにメッセージが表示されるようになります。
node のバージョンが異なる時に npm install を制限する
package.json に engines
という項目で使用する node のバージョンを指定できる
// package.json { "engines": { // node のバージョンを v14.17.6 以上 v15 未満に固定 "node": "^14.17.6" } }
この指定があると yarn では指定されたバージョン外の node で yarn install
するとエラーになる
npm は --engine-strict オプションが必要
npm の場合は warning だけでインストールされてしまいます。
node install --engine-strict
と --engine-strict
オプションを付ければ yarn と同じ様にエラーになりますが、チームのメンバーに 「npm install
する時は --engine-strict
オプションを付けてね。」とお願いしても人間は愚か (私が一番愚かだが) なので忘れてしまうでしょう。仕組みで解決したいですね…
.npmrc にオプションを設定できる
どうやら .npmrc
というファイルがあると、ファイルに書かれているオプションが設定されるっぽいです。
ここに先のオプションの指定を書いておくと npm install
= node install --engine-strict
となり yarn と同じ様にバージョンが異なる際にエラーを表示できるようになります。
$ touch .npmrc $ echo 'engine-strict=true' >> .npmrc
これで npm でも yarn でも node.js のバージョンが異なると npm install
がエラーになるようにできました!
所感
npm install エラーにできる設定があるのは知らなかったので勉強になりました。
やっぱ人の努力じゃなくて仕組みで自動的に解決できる方法が良いですね。らぶ。
[参考]
ねねっち〜