4

コンピューターに「npm_lazy」などのローカル npm ミラーをセットアップすることを検討しています。しかし、ローカルミラーではうまく機能しないnpm installようです。npm shrinkwrap

説明させてください。npm-shrinkwrap.jsonファイルがある場合、npm installコマンドは常に、shrinkwrap ファイルの"resolved"プロパティで指定された URL からパッケージを要求します。したがって、ローカル npm ミラーを で実行していてhttp://localhost:12345/も、それをレジストリとして使用するように npm を構成しても、ローカル ミラーからパッケージ モジュールを要求することはありません"resolved"( shrinkwrap ファイル内のプロパティがたまたま を指していない限りhttp://localhost:12345/) 。 .

基本的に、npm installnpm のレジストリ設定を無視し、shrinkwrap"resolved"プロパティに従います。

依存パッケージ名とバージョンで動的に構築する代わりにプロパティをnpm install使用する理由はありますか? "resolved"npm-shrinkwrap.json にこのフィールドがあるのはなぜですか?

それでは、私の問題に戻ります。npm_lazy をローカル npm ミラーとして使用したいと考えています。を指すようにすべての"resolved"URL を書き換えることができます。しかし、その場合、私のシュリンクラップ ファイルは移植性が低くなります。同僚のコンピューターで同じ npm_lazy サーバーが実行されていない限り、同僚は使用できません。npm-shrinkwrap.jsonhttp://localhost:12345/

透過的なミラーを作成するために、すべてのregistry.npmjs.orgトラフィックをにリダイレクトすることを検討しました。localhostしかし、それは難しすぎるでしょう -- HTTPS をサポートする必要があります。また、npm_lazy はどのようにして真のドメインにアクセスするのでしょうか? 変更される可能性がある IP アドレスで指定する必要があります。

ローカル コンピューターの NPM キャッシュをセットアップするために、他の誰かが同じことを試みましたか? しかし、私の主な質問は、なぜ npm が「解決済み」プロパティを使用するのですか? ありがとう。

4

2 に答える 2

2

シュリンクラップは依存関係をロックダウンし、そのシュリンクラップ ファイルを使用する全員に対して同じ「ビルド」(または依存関係) を保証しようとします。同じ理由で、バージョンだけでなくリポジトリ URL もロックダウンします。これらのいずれかを変更すると、パッケージのコンテンツが変更される可能性があり、保証が失われます。もちろん、shrinkwrap がリポジトリ キャッシュまたはプロキシの概念を認識している場合は、確かにあなたのものを使用する必要がありますが、明らかにそうではありません。

通常、(これはソース ファイルであるため) のリポジトリ URL を置き換え、package.jsonnpm Shrinkwrap を再度実行してファイルを再生成しnpm-shrinkwrap.json(生成されたファイルであるため)、それをローカルの dev ブランチに保持します。しかし、設定ファイルを分けておくのは面倒です。

したがってcache.repository.example.com、リポジトリのホスト名として入力し、 CNAMEnpmregistry を指す DNS に a を追加できます。npm_lazy をローカルにインストールしていれば、Hosts ファイル内のこの DNS エントリを安全に上書きして、localhost を指すことができます。

ただし、チェックアウトをローカライズするためのより簡単なソリューションがあります。最近、この小さなスクリプトをpackage.jsonnpm-shrinkwrap.json使用して質問に答えましたからの値でバージョンresolvedを更新します。これは、プロキシを使用するために のすべてのプロパティを更新するように簡単に適応させることができnpm-package.jsonます。演習として残しておきます ;-)

于 2015-11-12T23:06:50.653 に答える
0

resolvedプロパティをに保存したくありませんnpm-package.json

ユーティリティshonkwrapがそのトリックを行います。しかし、それはチームの全員に影響を与えshonkwrapますnpm shrinkwrap。または、同様のコードをビルド スクリプト (gulpfile など) に記述してresolved、既存の からプロパティを削除することもできますnpm-package.json

于 2016-01-07T04:20:05.713 に答える