簡単に言うと、Bowerのバージョン番号(およびNPMのバージョン)の構文はSemVerと呼ばれ、「セマンティックバージョニング」の略です。Node / npm内のsemverパーサーの APIのBowerおよびNPMで使用されるSemVerの詳細な構文のドキュメントを見つけることができます。semver.orgで、基本的な仕様(言及されていない、~
またはその他の構文の詳細)について詳しく学ぶことができます。
あります、超便利な視覚的semver計算 GROKとテストにはるかに簡単にこのすべてを作り、あなたがで遊ぶことができますが、。
SemVerは単なる構文ではありません!構文の意味を理解するのに役立つ、APIを公開する正しい方法について言うことは、かなり興味深いことがいくつかあります。重要なこと:
パブリックAPIを特定したら、バージョン番号の特定の増分でAPIへの変更を伝えます。XYZ(Major.Minor.Patch)のバージョン形式を検討してください。APIに影響しないバグ修正により、パッチバージョンが増加し、下位互換性のあるAPIの追加/変更によりマイナーバージョンが増加し、下位互換性のないAPI変更によりメジャーバージョンが増加します。
だから、あなた~
に関する特定の質問は、そのMajor.Minor.Patchスキーマに関連しています。(関連するキャレット演算子も同様^
です。)を使用~
して、受け入れるバージョンの範囲を次のいずれかに狭めることができます。
- 同じマイナーバージョンへのその後のパッチレベルの変更(「APIに影響しないバグ修正」)、または:
- 同じメジャーバージョンに対する後続のマイナーレベルの変更(「下位互換性のあるAPIの追加/変更」)
たとえば、1.2.x以降、1.2.0から1.3.0未満のパッチレベルの変更を行うことを示すには、次のように使用できます。
"angular": "~1.2"
or:
"angular": "~1.2.0"
これにより、.x
構文を使用した場合と同じ結果が得られます。
"angular": "1.2.x"
ただし、tilde / ~
構文を使用してさらに具体的にすることができます。1.2.4から始まるパッチレベルの変更のみを受け入れ、それでも1.3.0未満の場合は、以下を使用します。
"angular": "~1.2.4"
使用している場合は、メジャーバージョンに向かって左に移動します...
"angular": "~1"
...それは同じです...
"angular": "1.x"
or:
"angular": "^1.0.0"
...そして、1.0.0より上で2.0未満のマイナーレベルまたはパッチレベルの変更に一致します。
上記の最後のバリエーションに注意してください。これは「キャレット範囲」と呼ばれます。キャレットはのようにひどく見える>
ので、「1.0.0 より大きいすべてのバージョン」を意味すると考えると言い訳になります。(私は確かにそれで滑った。)いいえ。
キャレット範囲は、基本的には、左端の有効数字(通常はメジャーバージョン)のみを気にし、その左端の桁に影響しないマイナーレベルまたはパッチレベルの変更を許可することを示すために使用されます。ただし、メジャーバージョンを指定するチルド範囲とは異なり、キャレット範囲では正確なマイナー/パッチの開始点を指定できます。したがって、^1.0.0 === ~1
などのキャレット範囲で^1.2.3
は、変更を行うと言うことができます>=1.2.3 && <2.0.0
。チルダ範囲ではこれを行うことはできません。
間近で見ると、最初は混乱するようです。しかし、1秒間ズームアウトして、このように考えてください。キャレットでは、左端の有効数字が最も心配されていると簡単に言うことができます。チルダを使用すると、最も右にある数字に最も関心があると言えます。残りは詳細です。
ティルダとキャレットの表現力は、人々が単純な.x
構文よりもはるかに多く使用する理由を説明しています。だからこそ、どこで.x
役立つチルダも頻繁に使用されます。例として、NPM自体を参照してください。独自のpackage.jsonファイルは、中の依存関係がたくさん含まれて~2.4.0
ではなく、フォーマットを2.4.x
、それがフォーマット可能性があります。に固執すること~
で、どの開始パッチ番号が許容可能であるかに関係なく、構文は70以上のバージョン付き依存関係のリスト全体にわたって一貫しています。
とにかく、SemVerにはまだまだありますが、ここでは詳しく説明しません。ノードsemverパッケージのreadmeで確認してください。また、 SemVerがどのように機能するかを練習して頭を動かそうとしている間は、必ずセマンティックバージョニング計算機を使用してください。
RE:連続していないバージョン番号:OPの最後の質問は、連続していないバージョン番号/範囲を指定することです(私がそれをかなり編集した場合)。はい、一般的な二重パイプの「または」演算子を使用して、それを行うことができます||
。そのようです:
"angular": "1.2 <= 1.2.9 || >2.0.0"