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


3386

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

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

42
参考までに、次のようにして、プレフィックスを回避したり、カスタムのプレフィックスを使用したりできますnpm config set save-prefix=''。(~それがあなたの好みの場合は、引用符で囲んでください。)私は個人的にこれを行い、製造中のものをシュリンクラップします。
fncomp 2015年

19
チルドとキャレットの動作と相違点に関する重要な詳細:github.com/npm/node-semver#tilde-ranges-123-12-1
Jeffrey Martinez

11
このツールは、semver.npmjs.com
chaiyachaiya

@fncompは、コメントが正しいかどうかを明確にしたかっただけです。プロジェクトで依存関係の特定のバージョンのみを使用していますか?私たちのチームは依存関係のアップグレードをためらっています。特定のバージョンまたは依存関係のプレフィックス「〜」を使用することをお勧めします。
blogs4t 2018年

@fncompは、「私が個人的にこれを行って、生産中のものに対してシュリンクラップを行う」と言って、あなたが何を意味するのか詳細を教えていただけますか。ありがとう!
blogs4t 2018年

回答:


3847

NPMのドキュメントsemverのドキュメントをご覧ください。

  • 〜version「バージョンとほぼ同等」は、マイナーバージョンを増分せずに、将来のすべてのパッチバージョンに更新します。~1.2.31.2.3から<1.3.0までのリリースを使用します。

  • ^ version「バージョンと互換性がある」は、メジャーバージョンを増分せずに、将来のすべてのマイナー/パッチバージョンに更新します。^2.3.42.3.4から<3.0.0までのリリースを使用します。

以下のコメントを参照してください。


325
ここに投稿して、うまく考えていない人をうまく捕まえるようにしますが、^と〜は、依存関係からのマイナーリリースとポイントリリースを信頼できると想定しています。ライブラリを公開していて、他の人にあなたを信頼してほしい場合は、下流の依存関係を盲目的に受け入れないでください。依存関係からのドットの放出が悪いと、上流で連鎖反応が発生する可能性があり、洋ナシの形になったら人々があなたのドアをノックします。これは、製品コードでnpmシュリンクラップを使用するもう1つの大きな理由です。
tehfoo 2015

8
また、バージョンの前にa ^またはa を付加するnpmのナンセンスをすべて取り除くこともできます~。:あなたがあなたのバージョンより厳密な制御を持っているしたい場合は、これを設定する npm config set save-prefix=''
kumarharsh

5
@prasanthvは正しい:docs.npmjs.com/misc/semver#caret-ranges-1-2-3-0-2-5-0-0-4から:キャレット範囲^ 1.2.3 ^ 0.2.5 ^ 0.0 .4。[major、minor、patch]タプルの左端のゼロ以外の数字を変更しない変更を許可します。つまり、バージョン1.0.0以降のパッチとマイナーアップデート、バージョン0.X> = 0.1.0のパッチアップデート、バージョン0.0.Xのアップデートなしを許可します。
rofrol 2015年

15
@jgillichをsemverで使用すると0.2.x2はになりますmajor version。これが、docs.npmjs.comが特定の単語を使用した理由ですthe left-most non-zero digit。また、この場合について:^ 0.0.4は0.0.4を意味します
rofrol

11
@FagnerBrack:あなたが提供した具体的な例は正しいですが、一般的にあなたの考え方は間違っています。例:A3つのバージョンのパッケージがあるとします:0.0.10.0.2および0.0.3。にはバグがある0.0.1ので、少なくとも0.0.2パッケージに入れておきますB。あなたが書け0.0.xばあなたは得るでしょう0.0.3、それは大丈夫です。しかし、他のいくつかのパッケージCが両方Bを必要としA、さらに制約がある"A": "<0.0.2"場合は0.0.1、競合の問題を示すことなく取得できますが、これは望ましいことではありません。チルダ~0.0.2を使用すると、この問題を回避できます。
Maciej Sz 2015年

863

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

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

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

  • ~version「バージョンとほぼ同等」npm semver- Tilde Rangessemver(7)を参照
  • ^version「バージョンとの互換性」npm semver- Caret Rangessemver(7)を参照
  • 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タグ付きのパッケージなどがあります。


8
次のように、バージョンの正確な範囲を指定することもできます。厳密に1.2.0 || >=1.2.2 <1.3.01.2.0、または1.2.2から1.3.0までのすべて(包括的)。ただし、1.2.1または1.3.1以上ではなく、1.1でもない.x以下。
CodeManX 2016年

上記のより具体的なリンク-> docs.npmjs.com/files/package.json#dependencies
Toby

"Approximately equivalent to version"そして"Compatible with version"〜と^の振る舞いを説明するのにイライラするほど非特定的な方法です。実際の回答を提供してくれて、@ jgillichに感謝します。
スコットスタッフォード

636

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

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

セムバーテーブル

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

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

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

セムバー図

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


2
^ 0.2.5はどうですか?docs.npmjs.com/misc/semver#caret-ranges-1-2-3-0-2-5-0-0-4から:キャレット範囲^ 1.2.3 ^ 0.2.5 ^ 0.0.4。[major、minor、patch]タプルの左端のゼロ以外の数字を変更しない変更を許可します。つまり、バージョン1.0.0以降のパッチとマイナーアップデート、バージョン0.X> = 0.1.0のパッチアップデート、バージョン0.0.Xのアップデートなしを許可します。
rofrol

11
@rofrol 1.0.0より前のバージョンは不安定と見なされ、これらのルールは適用されません
pspi

2
だからあなたの説明は完全ではありません
rofrol

5
@rofrolええ、読みやすさのために省略しても良い場合があります。パッケージjsonの依存関係が1.0.0未満になる可能性はかなり低いです。20/80の原則も参照してください。これは重要なことに焦点を合わせるための優れたルールです
pspi

1
@pspi 1.0.0より前のバージョンは「ありそうもない」ですか?60のうち、15があり、それらのほとんどは不明瞭ではありません。
Dave Newton

99

セムバー

<major>.<minor>.<patch>-beta.<beta> == 1.2.3-beta.2
  • npm semver計算機を使用するテストにはを。(^(同じメジャー範囲の特定のバージョンより大きいすべてを含む)および〜(同じマイナー範囲の特定のバージョンより大きいすべてを含む)の説明は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メジャーレベルのパッケージをインストールすると、更新プログラムは新しいベータ/ prレベルのバージョンのみをインストールします!これnpm^、がデフォルトとして設定されpackage.json、インストールされたバージョンがのよう0.1.3になっている場合、すべてのメジャー/マイナー/パッチレベルがフリーズするためです。


ライブラリと消費者の開発者がシステムを理解していないため、プロジェクトを0から開始しないように人々に伝えることは恐ろしい解決策です。@asdfasdfadsの方がはるかに良い情報があると思います。
ProLoser

@ProLoser私はシステムを単純化すべきだと思います、そして私たちは0.xバージョンを使うべきではありません。
rofrol 2016

1
初期のライフサイクル開発とv0に関するユースケースは、非常に理にかなっています。v0がどのように適切に動作するかを学んだことで、実際に他の初期ライフサイクルプロジェクトを楽しみにしています。つまり、実際にそうでない場合にプロジェクトを1.x(別名:安定版)と宣言することを強制されることなく、多くの後方互換性のない急速に変化するAPIを持つことができます。
ProLoser

私はそれを理解していますが、それがsemverと修飾子でどのように機能するのが好きではありません
rofrol

2
それは意見のように感じられ、一般に受け入れられているアプローチとしてフレーム化されるべきではありません。そして^ 0.1.xはパッチを完璧に取得します。
ProLoser 2016年

93

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

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

それに加えて、^されたサポートされていません古いNPMのバージョンによって、注意して使用する必要があります。

したがって、これ^は適切なデフォルトですが、完全ではありません。あなたにとって最も役立つsemverオペレーターを注意深く選択して構成することをお勧めします。


13
正しくありません:キャレット範囲^ 1.2.3 ^ 0.2.5 ^ 0.0.4。[major、minor、patch]タプルの左端のゼロ以外の数字を変更しない変更を許可します。つまり、バージョン1.0.0以降のパッチとマイナーアップデート、バージョン0.X> = 0.1.0のパッチアップデート、バージョン0.0.Xのアップデートなしを許可します。docs.npmjs.com/misc/semver#caret-ranges-1-2-3-0-2-5-0-0-4
rofrol

6
この答えは完全に間違っています(他の多くの人がそうであるように)。これらのどれもメジャー番号を修正しません!@rofrolが言ったように、^は左端のゼロ以外の数字を変更せずに保持します。一方、〜は、マイナーバージョンが指定されている場合(例:〜1.2.3または〜1.2)、パッチの更新のみを許可し、マイナーバージョンが指定されていない場合(例:〜1)、マイナー更新を許可します。
TheBaj 2017

2
@TheBaj彼らは「修正」ではなく「定義」(「修正」)として「修正」を意味するので、メジャー番号の処理方法については全員が同意します。
maaartinus

1
はい、この回答は、「固定、固定、または不変にする」のように回答者が「修正」を意味することに気づくまで、完全に逆のように見えました。
NattyC

57

~:合理的に近い

   ~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

17
@kytwb-いいえ。リリース番号0の特別な場合、カラットはチルドに相当します。したがって、それはマイナーな増分ですが、^0.1.3バージョンのみを0.1.x受け入れ0.2.0、は受け入れません。この動作はと同等~0.1.3です。この動作の背後にある理由は、ゼロ番目のリリースのパッケージがまだ不安定であると見なされているという事実によるものです。semver.org、#4 の言葉では、「いつでも何でも変更される可能性があります」(下位互換性のない変更を含む)。
chharvey、2015

31

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

よく読んでいるのは semverがnpmにどのように適用される
か、およびsemver標準に一致させるために彼らが何をしているのかについてのこのブログ投稿です。http //blog.npmjs.org/post/98131109725/npm-2-0-0


2
正しくありません:キャレット範囲^ 1.2.3 ^ 0.2.5 ^ 0.0.4。[major、minor、patch]タプルの左端のゼロ以外の数字を変更しない変更を許可します。つまり、バージョン1.0.0以降のパッチとマイナーアップデート、バージョン0.X> = 0.1.0のパッチアップデート、バージョン0.0.Xのアップデートなしを許可します。docs.npmjs.com/misc/semver#caret-ranges-1-2-3-0-2-5-0-0-4
rofrol

28

帽子のマッチングはに更新さ^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.

このコメントは途方もなく役立つものであり、十分に文書化されていないようです。この動作に関するドキュメントへのリンクはありますか?v0プロジェクトに関するこの回答は、私を大いに助けてくれました。
ProLoser

リンクがありません。ググリング
カタフェタミン

2
より正式な方法でドキュメントに追加する必要があります。見落としがちなので、エンジニアリングチームにソニーで講演しました。slides.com/proloser/semver-v0
ProLoser

24

〜チルダ:

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

^キャレット:

  • ^ メジャー番号のみをフリーズします。
  • 依存関係を注意深く監視していて、マイナーリリースに互換性がない場合にコードをすばやく変更する準備ができている場合に使用されます。
  • 最新のメジャーバージョン(最初の番号)に更新されます。
  • ^ 1.2.3は、1.3.0を含むすべての1.xxリリースと一致しますが、2.0.0には対応しません。
  • キャレット(^)は、下位互換性のある新しい機能も提供します。

1
チルドは最新のパッチバージョン(最後の番号)と一致します。キャレットは最新のマイナーバージョン(中央の番号)と一致します。
アブドゥルラウフ2018年

「フリーズ」が最良の説明です。
mhrabiee

キャレットは両方ともメジャー番号をフリーズし、最新のメジャーバージョン(最初の番号)に更新しますか?メジャー番号は最初の番号なので、これは意味がありません。
NattyC

19

Tilde〜はマイナーバージョンと一致します。1.4.2が含まれるパッケージをインストールしていて、インストール後、package.jsonで〜1.4.2として使用し、npm installを実行すると、バージョン1.4.3および1.4.4も使用できますアップグレード後のプロジェクトでは、プロジェクトに1.4.4がインストールされます。しかし、そのパッケージで利用可能な1.5.0がある場合、それは〜によってインストールされません。マイナーバージョンと呼ばれます。

キャレット^はメジャーバージョンに一致します。プロジェクトに1.4.2パッケージがインストールされていて、インストール1.5.0がリリースされた後、^はメジャーバージョンをインストールします。^ 1.4.2がある場合、2.1.0をインストールできません。

固定バージョン特殊文字アウトと各インストール上のパッケージの変更バージョンにしたくない場合は、次に使用される固定バージョン例えば「1.4.2」

最新バージョン*最新バージョンをインストールする場合は、パッケージ名の前に*のみを使用してください。


3
この答えは誤解を招くものです。SemVerは明確に述べています。通常のバージョン番号はXYZ [ここで] Xはメジャーバージョン、Yはマイナーバージョン、Zはパッチバージョンの形式をとる必要があります。
レオ

15

ワンライナー解説

標準のバージョン管理システムは、major.minor.buildです(例2.4.1)。

npmは、これらの文字に基づいて特定のパッケージのバージョンをチェックして修正します

:メジャーバージョンが修正され、マイナーバージョンが修正され、任意のビルド番号に一致します

例:〜2.4.1は、2.4.xをチェックすることを意味します。

^:メジャーバージョンは修正され、任意のマイナーバージョンに一致し、任意のビルド番号に一致します

例:^ 2.4.1は、2.xxをチェックすることを意味します。


5
この回答には7行あります
FluxLemur 2018

11

おそらく、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


繰り返しますが、この答えは誤解を招くものです。SemVerは明確に述べています。通常のバージョン番号はXYZ [ここで] Xはメジャーバージョン、Yはマイナーバージョン、Zはパッチバージョンの形式をとる必要があります。
レオ

5

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

4

チルダ(〜)

メジャーバージョンは修正済み、マイナーバージョンは修正済み、任意のビルド番号に一致

"express": "~4.13.3" 

~4.13.3 4.13.xをチェックすることを意味します。ここで、xは何でもあり、4.14.0です。

キャレット(^)

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

"supertest": "^3.0.0"

^3.0.0 3.xxをチェックすることを意味します。


この回答が4年前に投稿さた同じ回答とどのように異なるかについて詳しく説明していただけますか?
フランクリンユー

2

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

major.minor.patch 1.0.2

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

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

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


1
この回答が4年前に投稿さた同じ回答とどのように異なるかについて詳しく説明していただけますか?
フランクリンYu

2

カラットに ^は、同じメジャー範囲の特定のバージョンよりも大きいすべてが含まれます。

チルダに ~は、同じマイナー範囲内の特定のバージョンよりも大きいすべてが含まれます。

たとえば、1.0.4までの許容可能なバージョン範囲を指定するには、次の構文を使用します。

  • パッチリリース:1.0または1.0.xまたは〜1.0.4
  • マイナーリリース:1または1.xまたは^ 1.0.4
  • メジャーリリース:*またはx

セマンティックバージョニング構文の詳細については、npm semver計算機を参照してください。

公開パッケージのnpmセマンティックバージョン§

npmドキュメントの詳細セマンティックバージョニングについて


1

それ自体は答えではなく、見落とされているように見える所見です。

カラット範囲の説明:

参照してください:https : //github.com/npm/node-semver#caret-ranges-123-025-004

[major、minor、patch]タプルの左端のゼロ以外の数字を変更しない変更を許可します。

^10.2.3一致する手段10.2.3 <= v < 20.0.0

それが彼らの意味だとは思わない。バージョン11.xxから19.xxを取り込むと、コードが破損します。

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


0

〜マイナーバージョンリリースの仕様^メジャーバージョンリリースを指定

たとえば、パッケージのバージョンが4.5.2の場合、アップデート時に〜4.5.2は最新の4.5.xバージョン(マイナーバージョン)をインストールします^ 4.5.2は最新の4.xxバージョン(メジャーバージョン)をインストールします


8
この回答が4年前に投稿さた同じ回答とどのように異なるかについて詳しく説明していただけますか?
フランクリン・ユー、

0

この質問に関連して、バージョンに関するComposerのドキュメントを確認できますが、ここでは簡単に説明します

  • チルダバージョン範囲()-〜1.2.3は> = 1.2.3 < 1.3.0と同等
  • キャレットのバージョン範囲(^)-〜1.2.3は> = 1.2.3 < 2.0.0と同等

したがって、Tildeを使用すると、パッチの自動更新が行われますが、マイナーバージョンとメジャーバージョンは更新されません。ただし、Caretを使用する場合は、パッチとマイナーバージョンを取得しますが、メジャー(重大な変更)バージョンは取得しません。

ティルデバージョンは「安全な」アプローチと見なされますが、信頼性の高い依存関係(よく管理されたライブラリ)を使用している場合は、キャレットバージョンに問題はありません(マイナーな変更によって変更が破壊されることはないためです)。

composer installとcomposer updateの違いについては、おそらくこのStackoverflowの投稿を確認する必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.