web-dev-qa-db-ja.com

package-lock.jsonファイルを.gitignoreに追加する必要がありますか?

プロジェクトにインストールされている依存関係のバージョンをロックするには、コマンドnpm installpackage-lock.jsonというファイルを作成します。これは Node.js v8.0. および npm v5.0. であるため、ご存知の方もいるでしょう。

Node.js および npm このファイルのコミットに関する推奨事項にもかかわらず、いつそれを避けるべきかに関するいくつかの懸念もオプションです。通常、私たちはプロジェクトにコミットしますが、それでも奇妙な質問です。

デフォルトでpackage-lock.jsonファイルをコミットする必要がありますが、すべきではない特定のケースがあります。たとえば、プロジェクトの依存関係の最新バージョンをテストする場合、package-lock.json.gitignoreに追加するオプションになります。

したがって、質問は次のとおりです。

  1. package-lock.jsonファイルを.gitignoreに追加する必要がありますか?
  2. 特別な状況はありますかまたはMUST NOTする必要がありますそれ?

いいえ、package-lock.json.gitignoreに追加しないでください。代わりに、私は強くお勧めします:

  1. package-lock.jsonをバージョン管理リポジトリに追加します
  2. ローカルおよびデプロイメントパイプラインの両方でアプリケーションをビルドする場合は、npm ciの代わりにnpm installを使用します。
    ciコマンドは[email protected]以降で使用可能です。疑わしい場合は、次の方法でnpmをアップグレードしてください。
    npm install -g npm。)

npm installコマンドの最大の欠点の1つは、package-lock.jsonを変更するという予期しない動作ですが、npm ciはロックファイル内のバージョンのみを使用し、package-lock.jsonpackage.jsonは同期していません。

また、npm cipackage-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つの理由です。

本当に自動化したい場合は、次のジョブを作成できます。

  • チェックアウトリポジトリ
  • npm updateを実行します
  • テストを実行します
    • テストに合格したら、コミットしてリポジトリにプッシュします
    • それ以外の場合は失敗し、手動で解決される問題を報告します

これは、CIサーバーでホストされていると思われるものです。 Jenkins、そしてそれは.gitignoreにファイルを追加することで前述の理由で達成されるべきではありません。


または quote npm doc

生成されたパッケージロックをソース管理にコミットすることを強くお勧めします。これにより、チームの他のユーザー、展開、CI /継続的統合、およびパッケージソースでnpmインストールを実行する他のユーザーがまったく同じ依存関係ツリーを取得できるようになりますあなたが開発していたこと。さらに、これらの変更の差分は人間が読める形式であり、npmがnode_modulesに加えた変更を通知するので、推移的な依存関係が更新されたか、引き上げられたかなどを確認できます。

npm cinpm installの違い に関して:

  • プロジェクトには、既存のpackage-lock.jsonまたはnpm-shrinkwrap.jsonが必要です。
  • パッケージロックの依存関係がpackage.jsonの依存関係と一致しない場合、npm ciはパッケージロックを更新する代わりにエラーで終了します。
  • npm ciは一度にプロジェクト全体のみをインストールできます。このコマンドでは個々の依存関係を追加できません。
  • node_modulesが既に存在する場合、npm ciがインストールを開始する前に自動的に削除されます。
  • package.jsonまたはパッケージロックのいずれにも書き込まれません。インストールは基本的に凍結されます。
29
k0pernikus