web-dev-qa-db-ja.com

package-lock.jsonでURLを解決したことの意味は何ですか?

パッケージロックファイルを生成するたびに、次のような「解決済み」ブロックもあります。

"resolved": "http://devel.npm.registry:4873/lodash/-/lodash-4.17.5.tgz"

このURLの意味は何ですか?後で、このパッケージロックに基づいて依存関係をインストールしようとした場合、同じnpmレジストリを使用する必要がありますか?ローカル開発用と本番ビルド用に異なるnpmレジストリを使用しているためです。したがって、開発時にはdevel.npm.registryを使用しますが、CIツールはproduction.npm.registryを使用します。私のテストによると、URLは関係ありません(私は[email protected]を試しました)。しかし、すぐに変更されるのは現在の実装ですが、URLは意図的に無視されていますか? npmの以前のバージョンのいくつかは、解決されたURLを実際にチェックしたと感じています。

documentation は、この場合あまり役に立ちません。

15

この質問に関するウェブ上の記事をいくつか見つけました。リンクに従ってください:

npmは、JSONをロックファイルの形式として使用します。 [email protected]はpackage-lock.jsonファイルの解決済みフィールドを無視し、基本的には.npmrcで定義されたフィールドにフォールバックするか、存在する場合はCLIを使用して--registry引数を介してフォールバックするため、そうでない場合は解決されたフィールドで定義されたフィールドを使用します。

https://medium.com/verdaccio/verdaccio-and-deterministic-lock-files-5339d82d611e


別の日、#npm5の良い点についての別のツイート。

npmは、package-lock.jsonを生成するために使用したレジストリーにとらわれなくなりました。

https://Twitter.com/maybekatz/status/862834964932435969


Package-lock.jsonで解決される目的は、パッケージがない場合に依存関係の解決手順(メタデータのフェッチ)をバイパスすることです。整合性は、あなたが同じものを得ていることを確認することです。解決されたフィールドがない場合、キャッシュされていないインストールはメタデータの変更により中断する可能性があり、実際に何かをダウンロードする前に完全なメタデータフェッチを実行する必要があるため、大幅に遅くなります。

Package-lock.jsonでは、異なるレジストリを異なるレジストリからフェッチできないことに注意してください。異なる解決済みフィールドを使用する異なるパッケージのパッケージロックがある場合でも、npmrcの現在のregistry =設定が何であっても、すべてのパッケージが常にフェッチされます。構成されたレジストリーと一致しない解決済みフィールドは、上で述べた(遅い)メタデータのフェッチを行いますが、現在のレジストリーからのみフェッチされます。

https://github.com/npm/npm/issues/16849#issuecomment-312442508

13