🔖
package.json に記述される チルダ ^ や キャレット ~ について
 チルダ ^ と キャレット ~
package.json に記述されているバージョン情報の チルダ ^ や キャレット ~ は以下の意味になります。
- バージョン固定
- ex) 3.2.1
 
- ex) 
- チルダ ~: マイナーバージョンまでの挙動を保証- ex) ~3.2.1=3.2.x
 
- ex) 
- キャレット ^: メジャーバージョンまでの挙動を保証- ex) ^3.2.1=3.x.x
 
- ex) 
- latest: 全てのバージョンでの挙動を保証
- ex) *=x.x.x
 
- ex) 
npm install 時の挙動
サンプルとして 3.2.1, 3.2.2, 3.3.0, 4.0.0 のバージョンがリリースされている npm パッケージ(a, b, c, d)があるとします。
そして、package.json を以下のように記述されているとします。
package.json
{
  (省略)
  "dependencies": {
    "a": "3.2.1",
    "b": "~3.2.1",
    "c": "^3.2.1",
    "d": "*"
  },
  (省略)
}
このときに npm install コマンドを実行した場合、インストールされるバージョンは以下のようになります。
| 記述方法 | key | value | 理解しやすい表記 | インストールするバージョン | 
|---|---|---|---|---|
| バージョン固定 | a | 3.2.1 | 3.2.1 | 3.2.1 | 
| チルダ指定 | b | ~3.2.1 | 3.2.x | 3.2.2 | 
| キャレット指定 | c | ^3.2.1 | 3.x.x | 3.3.0 | 
| latest | d | * | x.x.x | 4.0.0 | 
※ 前提として a, b, c, d のリリースされているパッケージのバージョンは 3.2.1, 3.2.2, 3.3.0, 4.0.0 とした時。
豆知識
ちなみに npm のバージョン管理は セマンティック バージョニング に準拠しているはずのため、ほとんどがキャレット ^ 指定のバージョンが package.json に記述されます。


Discussion