LoginSignup
0
0

More than 1 year has passed since last update.

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

Last updated at Posted at 2022-11-14

背景

特定のパッケージをインストールしてから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にする。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0