1. ホーム
  2. node.js

[解決済み】npm 5で作成されたpackage-lock.jsonファイルはコミットするのでしょうか?

2022-01-27 07:06:34

質問

npm 5 は本日リリースされました。 を作成し、決定論的なインストールを行うという新機能が含まれています。 package-lock.json ファイルを作成します。

このファイルは、ソース管理で保管することになっているのでしょうか?

と似たようなものだと推測しています。 yarn.lock composer.lock どちらもソース管理されているはずのものです。

解決方法は?

はい。 package-lock.json は、ソースコントロールにチェックインすることを意図しています。npm 5+を使用している場合、コマンドラインでこのような通知が表示されることがあります。 created a lockfile as package-lock.json. You should commit this file. によると npm help package-lock.json :

package-lock.json は、npmが のどちらかを変更します。 node_modules ツリー、または package.json . これは 生成されたツリーを正確に再現し、後続のインストールで は、中間的な依存関係の更新に関係なく、同一のツリーを生成する。

このファイルは、ソースリポジトリにコミットされることを意図しています。 であり、その役割は 様々な目的で使用されます。

  • チームメイト、デプロイメント、継続的インテグレーションが全く同じ依存関係をインストールすることが保証されるような、依存関係ツリーの単一の表現を記述します。

  • の以前の状態へタイムトラベルする機能を提供する。 node_modules ディレクトリ自体をコミットすることなく

  • ソースコントロールの差分を読みやすくすることで、ツリーの変更をより可視化することができます。

  • また、以前にインストールされたパッケージに対して繰り返されるメタデータの解決を npm がスキップできるようにすることで、インストールプロセスを最適化します。

に関する重要な詳細の1つは package-lock.json は公開できず、また は、トップレベル・パッケージ以外の場所で発見された場合、無視されます。これは npm-shrinkwrap.jsonと形式は同じですが、こちらは基本的に は公開を許可しています。CLIツールをデプロイしている場合や を使用することで、本番用パッケージの作成が可能になります。

もし package-lock.jsonnpm-shrinkwrap.json のルートに存在する場合 パッケージの package-lock.json は完全に無視されます。