回答:
同様にされてカバーされ、他の場所で多くのパッケージ管理システムによってサポートされている依存ロックファイルを、(例えば: 作曲とバンドラ)、エンド・オブ・チェーンプロジェクトにコードベースにコミットする必要があります-ので、各個人がそのプロジェクトを実行しようとしていることをやっていますテストされた依存関係のセットを正確に使用してください。
ロックファイルを、他のプロジェクト(より緩やかな依存関係が望ましい)に含めることを目的としたパッケージに常にコミットする必要があるかどうかは、あまり明確ではありません。ただし、YarnとNPM(@Cyrilleでカバーされている)はどちらもインテリジェントに無視yarn.lock
しpackage-lock.json
、必要に応じてそれぞれ、これらのロックファイルを常にコミットしても安全です。
したがって、常に少なくとも1つ、yarn.lock
またはpackage-lock.json
使用しているパッケージマネージャーに応じてコミットする必要があります。
現在、2つの異なるパッケージ管理システムがあり、どちらもからの依存関係の同じセットをインストールしpackage.json
ますが、2つの異なるロックファイルを生成して読み取ります。NPM 5はを生成しますpackage-lock.json
が、Yarnは生成しyarn.lock
ます。
コミットpackage-lock.json
すると、NPM 5で依存関係をインストールする人々のサポートを構築することになります。コミットするとyarn.lock
、Yarnで依存関係をインストールする人々のサポートを構築することになります。
コミットを選択するyarn.lock
か、package-lock.json
または両方を選択するかは、プロジェクトで開発している開発者がYarnまたはNPM 5、あるいはその両方のみを使用しているかどうかによって異なります。プロジェクトがオープンソースである場合、最もコミュニティにやさしいことはおそらく両方をコミットし、自動化されたプロセスを確保yarn.lock
してpackage-lock.json
常に同期を保つことです。
更新: Yarnに、ファイルからファイルを生成するimport
コマンドが導入されました。これは、2つのファイルの同期を保つのに役立ちます。(@weakishに感謝)yarn.lock
package-lock.json
この問題は、以下のYarnプロジェクトで詳細に議論されました。
現在、両方とも閉鎖されています。
yarn import
2018年に導入されました。yarnpkg.com/ blog
1つの依存関係ツリーロックファイルをコミットする必要がありますが、両方をコミットしないでください。また、プロジェクトをビルド+開発するには、yarnまたはnpm(両方ではない)で標準化する必要があります。
糸を標準化する場合、yarn.lockをコミットする必要がある理由についての糸の記事を以下に示します。
yarn.lock
ファイルとファイルの両方をコミットする場合package-lock.json
、2つのファイルが異なる依存関係ツリーを提供する方法はたくさんあります(yarnとnpmのツリー解決アルゴリズムが同一であっても)、それらが正確に提供することを保証することは重要です同じ答え。自明ではないので、同じ依存関係ツリーが両方のファイルで維持されることはまずありません。また、ビルドがyarnを使用して行われたか、npmを使用して行われたかに応じて、異なる動作を望まないでしょう。
もし糸を使用してから切り替えたときyarn.lock
にpackage-lock.json
(ここでの問題)、そしてコミットするロックファイルの選択が容易になりません、と私たちはもはや糸と異なるビルド結果としてNPMを心配する必要があります。このブログ投稿に基づくと、これはすぐには予想されない変更です(ブログ投稿には、との違いも記載されyarn.lock
ていpackage-lock.json
ます。
私は同じ質問について考えていました。これが私の考えです、それが役に立てば幸いです:
NPMパッケージlock.jsonのドキュメントには、次のことを言います。
package-lock.jsonは、npmがnode_modulesツリーまたはpackage.jsonを変更する操作に対して自動的に生成されます。中間の依存関係の更新に関係なく、後続のインストールで同一のツリーを生成できるように、生成された正確なツリーについて説明します。
「自分のマシンで機能する」効果を防ぐため、これは素晴らしいことです。
このファイルがない場合はnpm install --save A
、npmがに追加さ"A": "^1.2.3"
れますpackage.json
。他の誰かが実行されるとnpm install
、プロジェクトには、バージョン可能性がある1.2.4
のがA
リリースされました。これは、で指定されたサーバー範囲を満たす最新の利用可能なバージョンであるpackage.json
ため、このバージョンをインストールします。しかし、このバージョンで導入された新しいバグがある場合はどうなりますか?この人は、以前のバージョンを持っているため、バグなしで再現できない問題を抱えています。
node_modules
ディレクトリの状態を修正することで、package-lock.json
ファイルはすべてのパッケージの同じバージョンを持つため、この問題を回避できます。
しかし、npmモジュールを作成して公開している場合はどうでしょうか?ドキュメントには次のように書かれています:
package-lock.jsonに関する重要な詳細の1つは、公開できないことであり、最上位パッケージ以外の場所で見つかった場合は無視されます。
したがって、たとえそれをコミットしたとしても、ユーザーがモジュールをインストールすると、ユーザーはpackage-lock.json
ファイルを取得せず、package.json
ファイルのみを取得します。したがって、npmは、すべての依存関係のいくつかの範囲を満たす最新バージョンをインストールします。つまり、モジュールの作成を開始したときにインストールしたものではなく、常に依存関係のこれらのバージョンを使用してモジュールをテストする必要があります。したがって、その場合、package-lock.json
明らかに役に立たない。さらに、それは煩わしいことができます。
これが私の経験則です。アプリケーションで作業している場合は、ロックファイルをコミットします。ライブラリを維持している場合は、無視したリストに追加してください。どちらの方法でも、で正確なサーバー範囲を使用する必要がありますpackage.json
。Yehuda Katz(cached)は、いつコミットするかGemfile.lock
(Rubyのロックファイル)、いつコミットしないかについての素晴らしい説明を書きました。少なくともtl; drセクションを読んでください。
.gitignore
、通常はプロジェクトのルートにあります。
あなたは正しいです!との両方npm
を許可yarn
すると、問題が発生します。見てみましょうこの記事を。
現在、パッケージをインストールするために両方
yarn
とnpm
同じリポジトリで使用するユーザーに警告を追加する予定です。
package-lock.json
将来の混乱や起こり得る一貫性の問題を回避するために、yarnを使用する場合は、ファイルを削除することを強くお勧めします。
両方npm
をyarn
パッケージマネージャーとして使用したくない場合があります。
これらのファイルはツールによって管理されるため、yarnを使用すると効果的に更新されるpackage-lock.json
と仮定して、両方のファイルのコミットが正常に機能すると仮定します。
私はあなたのユーザーにとって最も重要だと思いますpackage-lock.json
(たとえば、私は糸を使用しません)、これはコミットする必要があります。
についてはyarn.lock
、単独で作業するかチームで作業するかによって異なります。ソロの場合、コミットする必要はないと思います。あなたのチームでの作業(する予定)場合は糸がするまで、あなたはおそらく、少なくとも、それをコミットする必要があり、それをサポートしています 🙂
結局、ヤーンチームは使用yarn.lock
をやめ、package-json.lock
代わりに使用することになると思いますが、この時点で簡単になりますwill
いいえ。両方のロックファイルを同時に使用すると、ほとんどの場合、特にチームで共同作業している場合、依存関係ツリーに不整合が生じます。どちらかのロックを無視するのは簡単な解決策です。チームがこの変更を理解し、同意することを確認してください。