pakage.jsonの^ (キャレット) と~ (チルダ)の違い

背景

特定のパッケージをインストールしてからpakage.jsonを見ると、以下のように表記されていることがわかる。

$ npm install --save react
"dependencies": {
  "react": "^15.3.2"
}

15.3.2と最新のバージョンだけ記載されれば良いのに、なぜか^のマークが前についている。
これの意味を以下でメモする。

^ (キャレット)

パッケージのバージョン番号のうち、一番左のゼロではない値を変更しない範囲でアップデートを許容する、という意味。
具体的にいうと、以下のように整理できる。

  • インストールされたバージョンが ^1.2.3 の場合

    →1.2.3以上2.0.0未満までのアップデートはOKにする。

  • インストールされたバージョンが ^0.2.3 の場合

    →0.2.3以上0.3.0未満までのアップデートはOKにする。

  • インストールされたバージョンが ^0.0.3 の場合

    →0.0.3以上0.0.4未満までのアップデートはOKにする。

インストールされたパッケージは、時間が経つと新しく更新され、バージョンが変更されるケースがある。つまり、pakage.jsonで複数の人が時間差をもってインストールすると、それぞれ違うバージョンのパッケージをインストールする可能性があるということである。
そのために必要なのがpakage-lock.jsonである。

pakage-lock.jsonに ついて知りたい方は以下のリンク参考にしてください。
npm i とnpm ciの違い

~ (チルダ)

minor versionが明記されていれば、patch versionのアップデートを許容するが、明記されていなければ、minor versionのアップデートを許容。
具体的にいうと、以下のように整理できる。

  • インストールされたバージョンが ~1.2.3 の場合

    →1.2.3以上1.3.0未満までのアップデートはOKにする。

  • インストールされたバージョンが ~1.2 の場合

    →1.2以上1.3.0未満までのアップデートはOKにする。

  • インストールされたバージョンが ~1 の場合

    →1.0.0以上2.0.0未満までのアップデートはOKにする。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です