😎

package.jsonの'~'と'^'の違い

2023/08/22に公開

初めに

package.jsonの ~^ の違いを調べたので、メモとして残します

前提

バージョンは基本的にはmajor.minor.patch と表示される

結論

  • ~(チルダ) はmajor, minorを固定し、patchのみ変更可能にする
  • ^(キャレット) はmajorを固定し、minor, patchを変更可能にする

~x.x.xの時

Allows patch-level changes if a minor version is specified on the comparator. Allows minor-level changes if not.

  • minorの指定があるならpatchのみ変更する
  • minorの指定がないならminorのみ変更する

~1.2.3の場合

minorの指定があるのでpatchのみ変更
=> 1.2.3以上、1.2.9以下

~1.2の場合

minorの指定があるのでpatchのみ変更
=> 1.2.0以上、1.2.9以下

~1の場合

minorの指定がないのでminorのみ変更
=> 1.0.0以上、1.9.0以下

^x.x.xの時

Allows changes that do not modify the left-most non-zero element in the [major, minor, patch] tuple. In other words, this allows patch and minor updates for versions 1.0.0 and above, patch updates for versions 0.X >=0.1.0, and no updates for versions 0.0.X.

一番左の0でない値を変更する

  • majorが0でないならminor, patch両方を変更できる
  • majorが0でminorが0でないならpatch両方を変更できる
  • major, minorが0ならバージョンアップなし

^1.2.3の場合

1.2.3以上1.9.9以下

^0.2.3の場合

0.2.3以上0.2.9以下

^0.0.3の場合

0.0.3以上0.0.3以下
=> バージョンアップなし

参考

Discussion