プロジェクトにインストールされている依存関係のバージョンをロックするには、コマンドnpm install
がpackage-lock.json
というファイルを作成します。これは Node.js v8.0. および npm v5.0. であるため、ご存知の方もいるでしょう。
Node.js および npm このファイルのコミットに関する推奨事項にもかかわらず、いつそれを避けるべきかに関するいくつかの懸念もオプションです。通常、私たちはプロジェクトにコミットしますが、それでも奇妙な質問です。
デフォルトでpackage-lock.json
ファイルをコミットする必要がありますが、すべきではない特定のケースがあります。たとえば、プロジェクトの依存関係の最新バージョンをテストする場合、package-lock.json
を.gitignore
に追加するオプションになります。
したがって、質問は次のとおりです。
package-lock.json
ファイルを.gitignore
に追加する必要がありますか?いいえ、package-lock.json
は.gitignore
に追加しないでください。代わりに、私は強くお勧めします:
package-lock.json
をバージョン管理リポジトリに追加しますnpm ci
の代わりにnpm install
を使用します。ci
コマンドは[email protected]以降で使用可能です。疑わしい場合は、次の方法でnpmをアップグレードしてください。npm install -g npm
。)npm install
コマンドの最大の欠点の1つは、package-lock.json
を変更するという予期しない動作ですが、npm ci
はロックファイル内のバージョンのみを使用し、package-lock.json
とpackage.json
は同期していません。
また、npm ci
はpackage-lock.json
の存在を要求し、存在しない場合はエラーを出力します。プロジェクトの依存関係が異なるマシン間で信頼性の高い方法で繰り返し解決されることを信頼できる強力なユースケースがあります。
さらに、npm ci
は依存関係を追加する前にnode_modules
フォルダー全体を破棄し、ローカルの変更ではなく実際の依存関係を使用しながら、通常のnpm install
よりも高速に動作するようにします。
package-lock.json
から、まさにそれを得ることができます:既知の動作状態。
過去には、ランダムな依存関係が破壊的な更新を受けたためにビルドが1日失敗するpackage-lock.json
/npm-shrinkwrap.json
/yarn.lock
ファイルのないプロジェクトがありました。 (多くのライブラリはsemvarのバージョン管理ガイドラインを順守していますが、マイナーアップグレードで壊れないという保証はありません。)
これらの問題は、最後の作業バージョンが何であるかを推測する必要があるため、解決が困難です。
プロジェクトの最新の依存関係のテストに関して:これはnpm update
の目的であり、テストをローカルで実行し、問題が発生した場合は問題を解決し、開発者が実行する必要があると主張します。次に、変更されたpackage-lock.json
をコミットします。 (アップグレードが失敗した場合、最後の作業package-lock.json
に戻すことができます。)
さらに、すべての依存関係を一度にアップグレードすることはめったにありません(さらにメンテナンスが必要になる可能性があるため)が、必要な更新(例:npm update {dependency}
またはnpm install {dependency}@2.1.3
)を選択します。これは、手動のメンテナンス手順と見なすもう1つの理由です。
本当に自動化したい場合は、次のジョブを作成できます。
これは、CIサーバーでホストされていると思われるものです。 Jenkins、そしてそれは.gitignore
にファイルを追加することで前述の理由で達成されるべきではありません。
または quote npm doc :
生成されたパッケージロックをソース管理にコミットすることを強くお勧めします。これにより、チームの他のユーザー、展開、CI /継続的統合、およびパッケージソースでnpmインストールを実行する他のユーザーがまったく同じ依存関係ツリーを取得できるようになりますあなたが開発していたこと。さらに、これらの変更の差分は人間が読める形式であり、npmがnode_modulesに加えた変更を通知するので、推移的な依存関係が更新されたか、引き上げられたかなどを確認できます。
npm ci
とnpm install
の違い に関して:
- プロジェクトには、既存のpackage-lock.jsonまたはnpm-shrinkwrap.jsonが必要です。
- パッケージロックの依存関係がpackage.jsonの依存関係と一致しない場合、
npm ci
はパッケージロックを更新する代わりにエラーで終了します。npm ci
は一度にプロジェクト全体のみをインストールできます。このコマンドでは個々の依存関係を追加できません。node_modules
が既に存在する場合、npm ci
がインストールを開始する前に自動的に削除されます。package.json
またはパッケージロックのいずれにも書き込まれません。インストールは基本的に凍結されます。