4401

最新の安定版nodeとにアップグレードした後npm、 を試しnpm install moment --saveました。エントリをpackage.jsonキャレット^接頭辞付きで保存します。以前は、チルダの~プレフィックスでした。

  1. でこれらの変更が行われたのはなぜnpmですか?
  2. ~チルダと キャレットはどう違います^か?
  3. 他社より優れている点は?
4

19 に答える 19

5052
于 2014-03-12T08:28:07.070 に答える
1218

質問で言及されているものを含む、バージョン固有のすべての方法を説明する公式の npmjs ドキュメントも追加したいと思います

価値 説明
~version 「バージョンとほぼ同等」npm semver - チルダ範囲
を参照
^version 「バージョンと互換性があります」npm semver - キャレット範囲
を参照してください
version バージョンと正確に一致する必要があります
>version バージョンより大きい必要があります
>=version
<version
<=version
1.2.x 1.2.0、1.2.1 など、ただし 1.3.0 は除く
* どのバージョンにもマッチ
latest 最新リリースを入手

上記のリストは網羅的なものではありません。その他のバージョン指定子には、GitHub URL と GitHub ユーザー リポジトリ、ローカル パス、および特定の npm タグを含むパッケージが含まれます。

公式ドキュメント

于 2014-09-16T06:25:07.670 に答える
811

npm では、指定されたものよりも新しいバージョンのパッケージをインストールできます。チルダ ( ~) を使用すると、バグ修正リリースが提供され、キャレット ( ^) を使用すると、下位互換性のある新しい機能も提供されます。

問題は、通常、古いバージョンではバグ修正があまり受けられないため、npm は^のデフォルトとしてキャレット () を使用することです--save

センバーテーブル

によると、「Semver の説明 - package.json にキャレット (^) があるのはなぜですか?」.

ルールは 1.0.0 より上のバージョンに適用され、すべてのプロジェクトがセマンティック バージョニングに従うわけではないことに注意してください。バージョン 0.xx では、キャレットはパッチの更新のみを許可します。つまり、チルダと同じように動作します。「キャレット範囲」を参照してください

概念の視覚的な説明は次のとおりです。

センバーダイアグラム

出典: 「セマンティック バージョニング チートシート」 .

于 2015-07-30T20:40:32.690 に答える
137

センバー

<major>.<minor>.<patch>-beta.<beta> == 1.2.3-beta.2
  • テストにはnpm semver Calculatorを使用します。^ (同じメジャー範囲の特定のバージョンよりも大きいものをすべて含む) と ~ (同じマイナー範囲の特定のバージョンよりも大きいものをすべて含む) の説明は 100% 正しいわけではありませんが、計算機は正常に動作するようです。
  • または、代わりにSemVer Checkを使用します。これは、パッケージを選択する必要がなく、説明も提供します。

変更を許可または禁止する

  • ピンのバージョン: 1.2.3.
  • (頭のように)使用し^ます。左から 2 番目のゼロ以外のレベルでの更新を許可します:^0.2.3を意味し0.2.3 <= v < 0.3ます。
  • 使用~(尻尾のように)。通常、一番右のレベルをフリーズするか、省略した場合はゼロに設定します。
  • ~1意味1.0.0 <= v < 2.0.0
  • ~1.2を意味し1.2.0 <= v < 1.3.0ます。
  • ~1.2.4を意味し1.2.4 <= v < 1.3.0ます。
  • 一番右のレベルを省略:0.2を意味し0.2 <= v < 1ます。~次の理由で異なります 。
    • 省略されたレベル バージョンの開始は常に0
    • サブレベルを指定せずに開始メジャー バージョンを設定できます。

すべての (できれば) 可能性

メジャー レベルの開始を設定し、上方への更新を許可する

*  or "(empty string)   any version
1                         v >= 1

メジャーレベルをフリーズ

~0 (0)            0.0 <= v < 1
0.2               0.2 <= v < 1          // Can't do that with ^ or ~ 
~1 (1, ^1)        1 <= v < 2
^1.2              1.2 <= v < 2
^1.2.3            1.2.3 <= v < 2
^1.2.3-beta.4     1.2.3-beta.4 <= v < 2

フリーズマイナーレベル

^0.0 (0.0)        0 <= v < 0.1
~0.2              0.2 <= v < 0.3
~1.2              1.2 <= v < 1.3
~0.2.3 (^0.2.3)   0.2.3 <= v < 0.3
~1.2.3            1.2.3 <= v < 1.3

パッチレベルでフリーズ

~1.2.3-beta.4     1.2.3-beta.4 <= v < 1.2.4 (only beta or pr allowed)
^0.0.3-beta       0.0.3-beta.0 <= v < 0.0.4 or 0.0.3-pr.0 <= v < 0.0.4 (only beta or pr allowed)
^0.0.3-beta.4     0.0.3-beta.4 <= v < 0.0.4 or 0.0.3-pr.4 <= v < 0.0.4 (only beta or pr allowed)

更新を許可しない

1.2.3             1.2.3
^0.0.3 (0.0.3)    0.0.3

注意: メジャー、マイナー、パッチの欠落または番号なしの指定は、欠落レベルbetaと同じです。any

注意: メジャー レベルのパッケージをインストールする0と、アップデートは新しい beta/pr レベル バージョンのみをインストールします。これは、 がデフォルトとして設定されてnpmおり、インストールされているバージョンが のような場合、すべてのメジャー/マイナー/パッチ レベルがフリーズするためです。^package.json0.1.3

于 2015-10-11T16:52:35.957 に答える
116

最初の数字 (「メジャー」) が少なくとも 1 である限り:

~メジャー番号とマイナー番号をロックします。これは、バグ修正 (3 番目の数字の増分) のみを受け入れる準備ができているが、機能を追加するマイナーなアップグレードでさえも、他の変更は望まない場合に使用されます。

^メジャー番号のみをロックします。これは、バグ修正 (3 番目の番号の増分) と、機能を追加するが既存のコードを壊してはならないマイナー アップグレード (2 番目の番号の増分) を喜んで受け取る場合に使用されます。ただし、既存のコードを壊すような変更 (最初の数字の増加) は望ましくありません。

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

したがって、^デフォルトは適切ですが、完全ではありません。最も便利な semver オペレーターを慎重に選択して構成することをお勧めします。

(「修正」と「バグ修正」を「修正」の矛盾する使用法で言うのを避けるために改訂されました。これは混乱を招きます)

于 2014-03-12T23:05:52.597 に答える
43

^1.[any].[any] (最新のマイナー バージョン)
~is 1.2.[any] (最新のパッチ)

semver が npm にどのように適用されるか、およびsemver 標準 に一致させるために何を行っているかについては、このブログ記事をよく読んでくださいhttp://blog.npmjs.org/post/98131109725/npm-2-0-0

于 2014-12-15T18:07:07.360 に答える
35

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

ルールは0.x.y、ソフトウェアがまだ成熟していないときにバージョン管理を使用し、パブリック API が変更されたときに中央の桁を増やしてリリースすることです (したがって、更新を^0.1.0取得している人0.2.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.
于 2015-10-19T11:24:26.043 に答える
7

semver は、ドットで区切られた 3 つの主要なセクションに分かれています。

major.minor.patch
1.0.0

これらの異なるメジャー、マイナー、およびパッチは、異なるリリースを識別するために使用されます。タイド (~) とキャレット (^) は、パッケージのバージョン管理で使用するマイナー バージョンとパッチ バージョンを識別するために使用されます。

~1.0.1
 Install 1.0.1 or **latest patch versions** such as 1.0.2 ,1.0.5
^1.0.1
 Install 1.0.1 or **latest patch and minor versions** such as 1.0.2 ,1.1.0 ,1.1.1
于 2019-11-27T08:52:21.597 に答える
4

バージョン番号は、各セクションを異なる意味で指定する構文にあります。構文は、ドットで区切られた 3 つのセクションに分かれています。

メジャー.マイナー.パッチ 1.0.2

メジャー、マイナー、およびパッチは、パッケージのさまざまなリリースを表します。

npm はチルダ (~) とキャレット (^) を使用して、それぞれ使用するパッチとマイナー バージョンを指定します。

したがって、~1.0.2 と表示されている場合は、バージョン 1.0.2 または 1.0.4 などの最新のパッチ バージョンをインストールすることを意味します。^1.0.2 が表示された場合は、バージョン 1.0.2、または 1.1.0 などの最新のマイナーまたはパッチ バージョンをインストールすることを意味します。

于 2018-09-28T06:58:51.150 に答える
4

それ自体は答えではありませんが、見落とされているように見える観察です。

キャレット範囲の説明:

参照: https://github.com/npm/node-semver#caret-ranges-123-025-004

[メジャー、マイナー、パッチ] タプルの左端のゼロ以外の数字を変更しない変更を許可します。

^10.2.3一致することを意味します10.2.3 <= v < 20.0.0

私はそれが彼らの意図したものではないと思います。バージョン 11.xx から 19.xx を取り込むと、コードが壊れます。

私は彼らが意味したと思いますleft most non-zero number field。SemVer には、数値フィールドが 1 桁であることを要求するものは何もありません。

于 2019-03-20T22:13:03.277 に答える