npm 5が本日リリースされました。新機能の1つとして、package-lock.json
ファイルを作成することで、決定性のあるインストールが可能になりました。
このファイルはソースコントロールで管理されるのでしょうか?
yarn.lock](https://stackoverflow.com/questions/39990017/should-i-commit-the-yarn-lock-file-and-what-is-it-for)や[
composer.lock`](https://stackoverflow.com/questions/12896780/should-composer-lock-be-committed-to-version-control)のようなものだと思っていますが、どちらもソースコントロールに保管されることになっています。
はい、package-lock.json
は、ソースコントロールにチェックインすることを目的としています。npm 5を使用している場合、コマンドラインに次のように表示されることがあります: created a lockfile as package-lock.json.You should commit this file.
npm help package-lock.json
によれば、このように表示されます。
npm help package-lock.json
]()によると、以下の通りです。 が
node_modulesツリー、または
package.json` を変更すると、自動的に生成されます。これには、生成された 生成された正確なツリーを記述しているので、後続のインストールでは、中間の依存関係に関わらず 生成された正確なツリーが記述されています。
このファイルは、ソースリポジトリにコミットされることを意図しており、以下のような様々な目的があります。 様々な目的があります。
チームメイト、デプロイメント、継続的インテグレーションが全く同じ依存関係をインストールすることが保証されるように、依存関係ツリーの単一の表現を記述します。
- ユーザーがディレクトリ自体をコミットすることなく、
node_modules
の以前の状態に「タイムトラベル」するための機能を提供します。
- ソースコントロールの差分を読むことで、ツリーの変更をよりわかりやすくする。
- また、以前にインストールされたパッケージに対して繰り返されるメタデータの解決をnpmがスキップすることで、インストールプロセスを最適化します。
package-lock.json
の重要な点は、これは公開できないということです。 トップレベルのパッケージ以外の場所で見つかっても無視されます。これは npm-shrinkwrap.json(5)とフォーマットを共有しており、基本的には同じファイルですが 公開することができます。これは、CLI ツールをデプロイする場合や 本番パッケージを作成するために公開プロセスを使用する場合を除き、これは推奨されません。
パッケージのルートに
package-lock.json
とnpm-shrinkwrap.json
の両方が存在する場合、package-lock.json
は、パッケージのルートに存在しないことになります。 パッケージのルートにpackage-lock.json
とnpm-shrinkwrap.json
の両方が存在する場合、package-lock.json
は完全に無視されます。
はい、このファイルをコミットすることができます。npm's official docs](https://docs.npmjs.com/files/package-lock.json)より。
npm
がnode_modules
ツリーやpackage.json
のいずれかを変更するすべての操作に対して、package-lock.json
が自動的に生成されます。これは生成された正確なツリーを記述したもので、後続のインストールでは、中間的な依存関係の更新にかかわらず、同一のツリーを生成することができます。このファイルは、ソースリポジトリ[...]にコミットされることを意図しています。