🔖
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