node.js version 取得 - package.jsonのチルダ(〜)とキャレット(^)の違いは何ですか?





7 Answers

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

https://docs.npmjs.com/files/package.json

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タグを持つパッケージ

指定 構成 固定

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

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



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

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

それに加えて、 ^は古い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



ハットマッチングは、 ^0.1.2から0.2.0更新されないので、「壊れた」とみなされる可能性があります。 ソフトウェアが出現しているときは、 0.xyバージョンを使用し、ハットマッチングは最後に変化する数字( y )にのみ一致します。 これは意図的に行われます。 理由は、ソフトウェアが進化している間にAPIが急速に変化するということです。ある日あなたはこれらのメソッドを持っていますが、先日はそれらのメソッドを持ち、古いメソッドはなくなりました。 既にライブラリを使用している人のコードを壊さないようにするには、メジャーバージョンをインクリメントします(例: 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.



おそらくあなたはpackage.json内のチルダ(〜)とキャレット(^)を見てきました。 それらの違いは何ですか?

npm install moment -saveを実行すると、package.jsonのエントリがキャレット(^)接頭辞とともに保存されます。

チルダ(〜)

最も単純な言葉では、チルダ(〜)は最新のマイナーバージョン(中間の数字)と一致します。 〜1.2.3はすべての1.2.xバージョンと一致しますが、1.3.0が不足します。

キャレット(^)

一方、キャレット(^)は、よりリラックスしています。 最新のメジャーバージョン(最初の番号)に更新されます。 ^ 1.2.3は1.3.0を含む1.xxリリースと一致しますが、2.0.0では維持されます。

リファレンス: https://medium.com/@Hardy2151/caret-and-tilde-in-package-json-57f1cbbe347b : https://medium.com/@Hardy2151/caret-and-tilde-in-package-json-57f1cbbe347b




チルダ(〜)

メジャーバージョンは固定、マイナーバージョンは固定、任意のビルド番号と一致

"express": "~4.13.3" 

~4.13.3は、xが何であれ4.13.xをチェックし、4.14.0

キャレット(^)

メジャーバージョンは固定され、マイナーバージョンに一致し、ビルド番号に一致します

"supertest": "^3.0.0"

^3.0.0は、xが何かである3.xxをチェックすることを意味します




〜マイナーバージョンリリースのスペック^メジャーバージョンリリースに指定

たとえば、パッケージのバージョンが4.5.2の場合、Update〜4.5.2は最新の4.5.xバージョン(MINOR VERSION)をインストールし、4.5.2は最新の4.xxバージョン(MAJOR VERSION)をインストールします。




Related


Tags

node.js   npm