かもメモ

自分の落ちた落とし穴に何度も落ちる人のメモ帳

フロントエンド開発環境: チーム開発するリポジトリで node のバージョンを揃えたい

チームでフロントの開発する時に 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.

nodenv でディレクトリのバージョンを指定する

$ cd project_dir
$ nodenv local 14.17.6

プロジェクトのディレクトリに .node-version というファイルが作成されるので、git commit してプロジェクトに加える。
.node-version のファイルが有る時に、nodenv が導入された環境で指定外の node のバージョンで node コマンドを実行すると、.node-version で指定されたバージョンをインストールするようにメッセージが表示されるようになります。

node のバージョンが異なる時に npm install を制限する

package.jsonengines という項目で使用する 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 エラーにできる設定があるのは知らなかったので勉強になりました。
やっぱ人の努力じゃなくて仕組みで自動的に解決できる方法が良いですね。らぶ。


[参考]

ねねっち〜