私は非常に単純な作業設定を持っています:
Lib A Lib B
publish 1.0.0-SNAPSHOT -> Private Registry -> npm install
AとBは異なるマシン上にあることに注意してください(jenkinsクラスターと考えてください!)。
2つのリリースの間、バージョンは「-SNAPSHOT」で終わり、ビルドごとに更新されます(A)。もちろん、依存しているライブラリ(B、...)は、常にレジストリの最新バージョンを使用する必要があります。問題は、NPMが同じバージョンを再フェッチしないことです。
Lib A Lib B
small change, rebuild:
publish 1.0.0-SNAPSHOT -> Private Registry !! npm install -f
npm cache clean
!! npm install -f
rm -rf node_modules
-> npm install
ローカルnpmプロキシ: "〜/ .npmrc":
force=true
cache-min=0
cache-max=0
しかし、これはnot機能します! node_modulesディレクトリの削除のみが機能します。開発者は「rm -rf node_modules && npm install」を使用する必要がないため、これは使用可能なソリューションではありません。
Mavenでは、「-U」オプションを使用しているため、この設定が機能します。これにより、Mavenは更新されたSNAPSHOTバージョンが使用可能かどうかを確認する必要があります。 NPMはSNAPSHOTの概念を理解していませんが、少なくとも毎回レジストリに質問する必要があります。
npmバージョン2.12.0
プライベートレジストリ:Sonatype Nexus™2.10.0-02
アイデア1
SemVerのプレリリース部分を「乱用」した場合、この動作を模倣することができます。私は次の戦略をうまく使用しました:
-SNAPSHOT
を使用してモジュールを公開しますが、公開するたびに増加する番号を追加します(-SNAPSHOT.#
または-SNAPSHOT-#
)。
たとえば、"x.x.x-SNAPSHOT.1"
は最初の発行、次に"x.x.x-SNAPSHOT.2"
は2番目の発行というようになります。
一貫したパターンを使用してください。したがって、たとえば、ドットを使用した場合はドットを使用し、ダッシュを使用した場合はダッシュを使用します。
依存モジュールの場合は、バージョンを次のように宣言するだけです
"^x.x.x-SNAPSHOT"
nPMは最新バージョンをフェッチします。
これはすべて2つの理由で機能します
1.0.0-SNAPSHOT < 1.0.0-SNAPSHOT.1 < 1.0.0-SNAPSHOT.2 < 1.0.0-SNAPSHOT.3
...警告:これはパッチバージョンでのみ機能します。技術的には1.2.x-SNAPSHOTは1.1.x-SNAPSHOTよりも大きいですが、プレリリースを使用する場合、SemVerはこれを考慮しません。
ドキュメントから:
バージョンにプレリリースタグ(たとえば、1.2.3-alpha.3)がある場合、同じ[メジャー、マイナー、パッチ]を持つ少なくとも1つのコンパレータタプルにもプレリリースタグがある場合にのみ、コンパレータセットを満たすことが許可されます。 。
たとえば、範囲> 1.2.3-alpha.3はバージョン1.2.3-alpha.7と一致することが許可されますが、3.4.5-alpha.9は3.4.5-alpha。 .9は、SemVerソートルールによると、技術的には1.2.3-alpha.3より「大きい」です。バージョン範囲は、1.2.3バージョンのプレリリースタグのみを受け入れます。バージョン3.4.5はプレリリースフラグがなく、3.4.5が1.2.3-alpha.7より大きいため、この範囲を満たします。
アイデア2繰り返しますが、これは別の「ハック」です。 SemVerのパッチ部分を失うことに問題がなければ、バージョンを次のように公開できます。
x.x.<unix Epoch ms>
。
UNIX Epochは常に増加しており(少なくとも32ビットで2038年まで)、公開するたびに、常により大きなバージョンを公開します。