[Javascript] package.jsonのチルダ(〜)とキャレット(^)の違いは何ですか?


Answers

私は公式のnpmjsのドキュメントも追加したいと思います。これは、質問で言及されているものを含め、バージョンの特殊性に関するすべてのメソッドを説明しています。

https://www.npmjs.org/doc/files/package.json.html

https://docs.npmjs.com/misc/semver#x-ranges-12x-1x-12-

  • 〜version " ~versionとほぼ同等" npm semver参照- Tilde Rangessemver(7)
  • ^version " ^versionと互換性があります" npm semver参照- Caret Rangessemver(7)
  • version正確にversion一致する必要があります
  • >versionより大きい
  • >=versionなど
  • <version
  • <=version
  • 1.2.x 1.2.0,1.2.1などであるが、1.3.0ではなく
  • http://sometarballurl (これはローカルでダウンロードされインストールされるtarballのURLかもしれません
  • *任意のバージョンに一致
  • latestのリリースを入手

上記の一覧は網羅的なものではありません。 他のバージョン指定子には、GitHubのURLとGitHubのユーザリポジトリ、ローカルのパス、特定のnpmタグを持つパッケージ

Question

私が最新の安定nodenpmにアップグレードした後、 npmnpm install moment --saveしようとしました。 caret(^)接頭辞を持つpackage.jsonのエントリを保存します。 以前は、 tilde(~)接頭辞でした。

  1. これらの変更はなぜnpm行われますか?
  2. tilde(~)caret(^)の違いは何ですか?
  3. 他のものよりも利点は何ですか?



ハットマッチングは、 ^0.1.2から0.2.0更新されないので、「壊れた」とみなされる可能性があります。 ソフトウェアが出現しているときは、 0.xyバージョンを使用し、ハットマッチングは最後に変化する数字( y )にのみ一致します。 これは意図的に行われます。 理由は、ソフトウェアが進化している間にAPIが急速に変化するということです。ある日あなたはこれらのメソッドを持っていますが、先日はそれらのメソッドを持ち、古いメソッドはなくなりました。 既にライブラリを使用している人のコードを壊さないようにするには、メジャーバージョンを1.0.0ます(例: 1.0.0 - > 2.0.0 - > 3.0.0 。 だから、あなたのソフトウェアが最終的に100%完成しフル機能を備えて11.0.0 、それはバージョン11.0.0ようになり、それは意味がないように見え、実際には混乱します。 一方、 0.1.x - > 0.2.x - > 0.3.xバージョンを使用していた場合、ソフトウェアが最終的に100%完成しフル機能を持​​つまでにはバージョン1.0.0としてリリースされます「このリリースは長期的なサービスであり、このバージョンのライブラリをプロダクションコードで使用することができます。作成者は明日や翌月のすべてを変更することはなく、パッケージを放棄しません」。

ルールは、ソフトウェアがまだ成熟していないときに0.xyバージョン管理を使用し、パブリックAPIが変更されたときに中間桁をインクリメントしてリリースする(したがって、 ^0.1.0人は0.2.0更新を得ず、そのコードを壊す)。 その後、ソフトウェアが成熟したら1.0.0下に1.0.0し、パブリックAPIが変更されるたびに左端の数字をインクリメントします(したがって、 ^1.0.0を持つ人は2.0.0アップデートを取得せず、コードを破らないでしょう)。

Given a version number MAJOR.MINOR.PATCH, increment the:

MAJOR version when you make incompatible API changes,
MINOR version when you add functionality in a backwards-compatible manner, and
PATCH version when you make backwards-compatible bug fixes.



〜チルダ:

  • ~ メジャー番号とマイナー番号を修正します。
  • これは、依存関係のバグ修正を受け入れる準備ができているが、互換性のない変更を望まないときに使用されます。
  • チルダは、 最新のマイナーバージョン (中間の番号)と一致します。
  • 〜1.2.3はすべての1.2.xバージョンと一致しますが、1.3.0を逃してしまいます。
  • チルダ(〜)はバグ修正リリースを提供します

^カレット:

  • ^メジャー番号のみを修正します。
  • これは、あなたの依存関係を注意深く見ているときに使用され、マイナーリリースに互換性がない場合はすぐにコードを変更する準備ができています。
  • 最新のメジャーバージョン (最初の番号)に更新されます。
  • ^ 1.2.3は1.3.0を含む1.xxリリースにマッチしますが、2.0.0ではホールドオフになります。
  • キャレット(^)は、後方互換性のある新機能も提供します。



~メジャー番号とマイナー番号を修正します。 これは、依存関係のバグ修正を受け入れる準備ができているが、互換性のない変更を望まないときに使用されます。

^メジャー番号のみを修正します。 これは、あなたの依存関係を注意深く見ているときに使用され、マイナーリリースに互換性がない場合はすぐにコードを変更する準備ができています。

それに加えて、 ^は古いnpmバージョンではサポートされていないため、慎重に使用する必要があります。

だから、 ^は良いデフォルトですが、完璧ではありません。 私は、あなたにとって最も有用なセム演算子を慎重に選択して設定することをお勧めします。




~ :合理的に近い

   ~1.1.5: 1.1.0 <= accepted < 1.2.0

^ :と互換性があります

   ^1.1.5: 1.1.5 <= accepted < 2.0.0

   ^0.1.3: 0.1.3 <= accepted < 0.2.0

   ^0.0.4: 0.0.4 <= accepted < 0.1.0



^:バージョンがLeft Most Non-Zero Version(左側から1番目のゼロでないバージョンの数字)よりも小さいものを受け入れる。

〜:2番目の最も左のゼロ以外のバージョン(左から2番目のゼロでないバージョン番号)より小さいバージョンの変更を受け入れます。 または、2番目に左のゼロ以外のバージョンがない場合、Acceptバージョンはほとんどのバージョンよりも少なく変更されます。




Links