2020.4.2

yarn addコマンドでメジャーバージョンのみを固定にしてpackage.jsonにバージョン情報を保存する

yarn addコマンドでライブラリをインストールする時にメジャーバージョンのみ指定したい時があったのですが、Windows環境(powershell)では注意しないといけないことがあったのでメモとして残しておきます。

目次

  • バージョン(メジャー、マイナー、パッチ)について
  • npm installのコマンド例
  • yarn addコマンドの例(MacOS)
  • yarn addコマンドの例(Windows、powershell)
  • 参考リンク

バージョン(メジャー、マイナー、パッチ)について

Nodo.js系ライブラリのバージョンは通常「2.6.11」といったようなバージョンの付け方になっていて、それぞれ以下のようになっています。

<major>.<minor>.<patch>

それぞれの数値がインクリメントされるタイミングは以下の通り。

  • <major> : 互換のない変更を行った時
  • <minor> : 互換性を維持した状態で新しい機能を追加した時
  • <patch> : 互換性を維持した状態でバグを修正した時

今回やりたいことは、上記の内、<major>バージョンのみ固定として、他の<minor>や<patch>については最新のものをインストールし、その時の指定したバージョン情報をpackage.jsonに残す、といったことになります。

npm installのコマンド例

今回やりたいことをnpm installコマンドで表すと以下の通り。

npm install --save core-js@2

インストールしたいパッケージ名の後に「@2」と指定するだけで、package.jsonのdependenciesには以下のように追記されます。

"dependencies": {
  "core-js": "^2.6.11"
}

バージョン「^2.6.11」の先頭にある「^(キャレット)」がメジャーバージョンの固定を意味しています。npmの場合は、デフォルトでマイナーとパッチのバージョンが更新可能となるので簡単です。

yarn addコマンドの例(MacOS)

yarnを使った場合ですが、上記のnpm installと同様のバージョン指定を行う場合、以下のようなコマンドになります。

yarn add core-js@^2.6.11

メジャーバージョンのみの指定ではそのまま「^2」となってしまうので、インストール時にマイナーとパッチのバージョンの記述が必要です。

yarn addコマンドの例(Windows、powershell)

さて、問題のWindows(powershell)でのyarn addコマンドですが、これについては以下のような指定の仕方になります。

yarn add core-js@^^^^2.6.11

Windows(powershell)の場合、^(キャレット)が4つ必要で、1つや2つでは効かず、4つないと各バージョン(メジャー、マイナー、パッチ)がすべて指定された状態でpackage.jsonに追記されてしまいます。

Windowsの場合はどうやらキャレットをエスケープ文字として認識してしまうため、このような指定の仕方になるようです。

参考リンク

Nuxt.js】関連記事