web-dev-qa-db-ja.com

MavenのようなプライベートNPMでのスナップショットの使用

私は非常に単純な作業設定を持っています:

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のキャッシュをグローバルに無効にする

ローカル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

25
Tristan

アイデア1

SemVerのプレリリース部分を「乱用」した場合、この動作を模倣することができます。私は次の戦略をうまく使用しました:

-SNAPSHOTを使用してモジュールを公開しますが、公開するたびに増加する番号を追加します(-SNAPSHOT.#または-SNAPSHOT-#)。

たとえば、"x.x.x-SNAPSHOT.1"は最初の発行、次に"x.x.x-SNAPSHOT.2"は2番目の発行というようになります。

一貫したパターンを使用してください。したがって、たとえば、ドットを使用した場合はドットを使用し、ダッシュを使用した場合はダッシュを使用します。

依存モジュールの場合は、バージョンを次のように宣言するだけです

"^x.x.x-SNAPSHOT"

nPMは最新バージョンをフェッチします。

これはすべて2つの理由で機能します

  1. SemVerはプレリリースを次のように扱います1.0.0-SNAPSHOT < 1.0.0-SNAPSHOT.1 < 1.0.0-SNAPSHOT.2 < 1.0.0-SNAPSHOT.3 ...
  2. NPMは常に最新のプレリリースバージョンを取得します

警告:これはパッチバージョンでのみ機能します。技術的には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年まで)、公開するたびに、常により大きなバージョンを公開します。

25
dustin.schultz