背景
特定のパッケージをインストールしてからpakage.jsonを見ると、以下のように表記されていることがわかる。
$ npm install --save react
"dependencies": {
"react": "^15.3.2"
}
15.3.2と最新のバージョンだけ記載されれば良いのに、なぜか^のマークが前についている。
これの意味を以下でメモする。
^ (キャレット)
パッケージのバージョン番号のうち、一番左のゼロではない値を変更しない範囲でアップデートを許容する、という意味。
具体的にいうと、以下のように整理できる。
→1.2.3以上2.0.0未満までのアップデートはOKにする。
→0.2.3以上0.3.0未満までのアップデートはOKにする。
→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.3.0未満までのアップデートはOKにする。
→1.2以上1.3.0未満までのアップデートはOKにする。
→1.0.0以上2.0.0未満までのアップデートはOKにする。