[解決済み】bower(とnpm)バージョンの構文は何ですか?
質問
Bowerでは、以下のような構文でパッケージのバージョン要件を指定することができます。
"dependencies": {
"<name>": "<version>",
},
しかし、この構文がどのようなものなのかがわかりません。
<version>
. バージョンを指定できることは知っています。
-
であるバージョンより大きい
">1.0.0"
-
バージョンより大きいか等しい
">=1.0.0"
-
またはある範囲にある。
"1.0.0 - 2.0.0"
.
また、チルダを含む一般的なバージョン構文があることも知っています。
"~1.0.0"
. しかし、それが何を意味するのか、また、それが
"=1.0.0"
.
また、連続しない複数のバージョンを指定することができるのかどうか、例えば、正確に
1.0.3
よりも大きいバージョンと
1.5.0
などなど...
解決方法は?
簡単に言うと、Bowerのバージョン番号(とNPMの)のための構文はSemVerと呼ばれ、「Semantic Versioning」の略です。BowerとNPMで使用されているSemVerの詳細な構文については、以下のAPIでドキュメントを見つけることができます。
Node/npmのsemverパーサーは
. 基本的な仕様については、こちらで詳しく説明されています。
ではなく
について言及します。
~
またはその他の構文の詳細)を
semver.org
.
がありますね。 超便利なビジュアルセンバー計算機 で遊べるので、理解やテストがより簡単になります。
SemVerは単なる構文ではありません。APIを公開する正しい方法について、非常に興味深いことが書かれており、この構文の意味を理解するのに役立ちます。重要なことです。
<ブロッククオート公開APIを特定したら、その変更をバージョン番号の具体的な増分で伝える。 X.Y.Z(メジャー.マイナー.パッチ)のバージョン形式を考える . APIに影響を与えないバグフィックスはパッチバージョン、後方互換性のあるAPIの追加・変更はマイナーバージョン、後方互換性のないAPIの変更はメジャーバージョンをインクリメントしています。
では、具体的な質問である
~
は、このMajor.Minor.Patchスキーマに関連するものです。(関連するキャレット演算子
^
.) を使用することができます。
~
というように、受け入れるバージョンの範囲をどちらかに絞ることができます。
- 後続 パッチレベル は、同じマイナーバージョンへの変更 ( APIに影響を与えないバグフィックスです。 )、または
- 後続 マイナーレベル は、同じメジャーバージョンへの変更 ( 後方互換性のあるAPI追加/変更"。 )
たとえば、1.2.0 から始まって 1.3.0 未満の 1.2.x ツリーでのパッチレベルの変更をすべて受け入れることを示すには、次のようにします。
"angular": "~1.2"
or:
"angular": "~1.2.0"
また、これは
.x
の構文があります。
"angular": "1.2.x"
しかし、チルダ/を使うことで
~
の構文を使えば、さらに具体的になります。パッチレベルの変更しか認めない場合は
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
. チルダレンジではできなかったことですね。
近くで見ると、最初は分かりにくいかもしれませんね。でも、ちょっとズームアウトして、こんなふうに考えてみてください。 キャレットを使えば、有効数字が左から何番目であるかを気にすることができます。チルダは、右端の桁に最も関心があることを表します。 あとは細かいところですね。
チルダとキャレットの表現力の高さが、よりシンプルな
.x
の構文は、より多くのことを可能にします。そのため、チルダがよく使われます。
.x
となります。例えば、npm自身を見てみましょう。npm自身のpackage.jsonファイルには、多くの依存関係があり、その依存関係は
~2.4.0
形式ではなく
2.4.x
フォーマットで
かもしれない
を使用します。にこだわることで
~
この構文は、70以上のバージョンの依存関係のリストで、どの開始パッチ番号が受け入れられるかに関係なく、ずっと一貫しています。
いずれにせよ、SemVerにはまだ多くの魅力がありますが、ここではそのすべてを紹介することは避けます。詳細は ノード semver パッケージの readme . そして を必ず使用してください。 セマンティックバージョニング計算機 を練習し、SemVerがどのように機能するかを理解しようとしている間に。
RE: 連続しないバージョン番号 OPの最後の質問は、連続しないバージョン番号/範囲を指定することについてのようです(私が公正に編集した場合)。はい、一般的なダブルパイプの "or" 演算子を使用して、それが可能です。
||
. こんな感じで。
"angular": "1.2 <= 1.2.9 || >2.0.0"
関連
-
[解決済み】Nodejs: Errorを解決する方法。ENOENT: そのようなファイルまたはディレクトリがありません
-
[解決済み】MongoDBでコレクションを日付で並べ替えるには?
-
[解決済み】npm 5で作成されたpackage-lock.jsonファイルはコミットするのでしょうか?
-
[解決済み] package.jsonのチルダ(~)とキャレット(^)の違いは何ですか?
-
[解決済み] npm installの-saveオプションは何ですか?
-
[解決済み] インストールされているnpmパッケージのバージョンを検索する
-
[解決済み] npm package.jsonファイルのdependencies, devDependencies, peerDependenciesの違いは何ですか?
-
[解決済み] package.jsonの各依存関係を最新バージョンに更新する方法は?
-
[解決済み] Bowerとnpmの違いは何ですか?
-
[解決済み】Grunt、NPM、Bowerの違い( package.json vs bower.json )
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】ExpressJSとMeteorJSの比較【終了しました
-
[解決済み】モジュール '@babel/core' が見つかりません。
-
[解決済み】nodemon - app crashed - waiting for file changes before start
-
[解決済み】passport.js passport.initialize() ミドルウェアが使用されていません。
-
[解決済み] npm install エラー - ローカルの発行者証明書を取得できません。
-
[解決済み] Heroku "状態が起動から停止に変更されました SIGTERMで全プロセスを停止"
-
[解決済み] http-server コマンドが見つかりません。
-
[解決済み] Yarn にパッケージを強制的に再インストールさせるにはどうしたらいいですか?
-
[解決済み] MongoNetworkError: 最初の接続でサーバー [localhost:27017] への接続に失敗 [MongoNetworkError: connect ECONNREFUSED 127.0.0.1:27017] 。
-
[解決済み] Mongoose Schema がモデルとして登録されていません。