yarn.lockおよびpackage-lock.jsonファイルをコミットする必要がありますか?


118

私たちはすべての確定的なpkgインストールに糸を使用していますが、ユーザーがnpmを使用することを妨げていません。ただし、これらの両方のファイルがあると問題が発生すると思います。.gitignore dirに追加する必要がありますか?


回答:


148

一般的に常に依存関係ロックファイルをコミットする

同様にされてカバーされ、他の場所で多くのパッケージ管理システムによってサポートされている依存ロックファイルを、(例えば: 作曲バンドラ)、エンド・オブ・チェーンプロジェクトにコードベースにコミットする必要があります-ので、各個人がそのプロジェクトを実行しようとしていることをやっていますテストされた依存関係のセットを正確に使用してください。

ロックファイルを、他のプロジェクト(より緩やかな依存関係が望ましい)に含めることを目的としたパッケージに常にコミットする必要があるかどうかは、あまり明確ではありません。ただし、YarnとNPM(@Cyrilleでカバーされている)はどちらもインテリジェントに無視yarn.lockpackage-lock.json、必要に応じてそれぞれ、これらのロックファイルを常にコミットしても安全です。

したがって、常に少なくとも1つ、yarn.lockまたはpackage-lock.json使用しているパッケージマネージャーに応じてコミットする必要あります。

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.lockpackage-lock.json


この問題は、以下のYarnプロジェクトで詳細に議論されました。

現在、両方とも閉鎖されています。


1
すばらしい答えです。ただし、要点については、「最も安全なことは、依存関係が変更されるたびに両方を生成してコミットすることです。」なぜこれが「最も安全な」ことなのか、よくわかりません。ご指摘のとおり、「2つのファイルが同期されない可能性があります。」@crimboの回答は、この問題をより詳細に説明しています。
TachyonVortex

これは、プロジェクトを実行するすべての人を制御できるようになるかどうかの違いかもしれません。チームを所有している場合は、必ずYarnで標準化し、yarn.lockを使用してください。しかし、それがオープンソースプロジェクトである場合(他のすべてのプロジェクトと同様)、内部でYarnを使用していても、プロジェクトでNPMを使用している可能性があります。したがって、最も安全な方法は、自動化されたシステムを使用して、yarn.lockとpackage-lock.jsonの両方の同期を維持することです。また、Yarnに圧力をかけて、package-lock.jsonに切り替えます。
Robin Winslow

1
yarn import2018年に導入されました。yarnpkg.com/ blog
2018/06/04

18

1つの依存関係ツリーロックファイルをコミットする必要がありますが、両方をコミットしないでください。また、プロジェクトをビルド+開発するには、yarnまたはnpm(両方ではない)で標準化する必要があります。

糸を標準化する場合、yarn.lockをコミットする必要がある理由についての糸の記事を以下に示します。

yarn.lockファイルとファイルの両方をコミットする場合package-lock.json、2つのファイルが異なる依存関係ツリーを提供する方法はたくさんあります(yarnとnpmのツリー解決アルゴリズムが同一であっても)、それらが正確に提供することを保証することは重要です同じ答え。自明ではないので、同じ依存関係ツリーが両方のファイルで維持されることはまずありません。また、ビルドがyarnを使用して行われたか、npmを使用して行われたかに応じて、異なる動作を望まないでしょう。

もし糸を使用してから切り替えたときyarn.lockpackage-lock.jsonここでの問題)、そしてコミットするロックファイルの選択が容易になりません、と私たちはもはや糸と異なるビルド結果としてNPMを心配する必要があります。このブログ投稿に基づくと、これはすぐには予想されない変更です(ブログ投稿には、との違いも記載されyarn.lockていpackage-lock.jsonます。


11

私は同じ質問について考えていました。これが私の考えです、それが役に立てば幸いです:

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明らかに役に立たない。さらに、それは煩わしいことができます。


7

これが私の経験則です。アプリケーションで作業している場合は、ロックファイルをコミットします。ライブラリを維持している場合は、無視したリストに追加してください。どちらの方法でも、で正確なサーバー範囲を使用する必要がありますpackage.jsonYehuda Katzcached)は、いつコミットするかGemfile.lock(Rubyのロックファイル)、いつコミットしないかについての素晴らしい説明を書きました。少なくともtl; drセクシ​​ョンを読んでください。


リンクが壊れています。
JuhaSyrjälä2017

@JuhaSyrjäläに感謝します。記事に2つ目のリンクを追加しました。
ravinggenius 2017

npmまたはyarnの無視リストはどこにありますか?
neves

「リストを無視する」は、プロジェクトのソースリポジトリ(git、mercurial、Subversion)に固有です。gitの場合、ファイルはと呼ばれ.gitignore、通常はプロジェクトのルートにあります。
ravinggenius

4

あなたは正しいです!との両方npmを許可yarnすると、問題が発生します。見てみましょうこの記事を

現在、パッケージをインストールするために両方 yarnnpm同じリポジトリで使用するユーザーに警告を追加する予定です

package-lock.json将来の混乱や起こり得る一貫性の問題を回避するために、yarnを使用する場合は、ファイルを削除することを強くお勧めします。

両方npmyarnパッケージマネージャーとして使用したくない場合があります。


2

これらのファイルはツールによって管理されるため、yarnを使用すると効果的に更新されるpackage-lock.jsonと仮定して、両方のファイルのコミットが正常に機能すると仮定します。

私はあなたのユーザーにとって最も重要だと思いますpackage-lock.json(たとえば、私は糸を使用しません)、これコミットする必要があります。

についてはyarn.lock、単独で作業するかチームで作業するかによって異なります。ソロの場合、コミットする必要はないと思います。あなたのチームでの作業(する予定)場合は糸がするまで、あなたはおそらく、少なくとも、それをコミットする必要があり、それをサポートしています 🙂

結局、ヤーンチームは使用yarn.lockをやめ、package-json.lock代わりに使用することになると思いますが、この時点で簡単になりますwill


1
これは、yarn.lockの使用を停止しませんでした。
jayarjo

0

いいえ。両方のロックファイルを同時に使用すると、ほとんどの場合、特にチームで共同作業している場合、依存関係ツリーに不整合が生じます。どちらかのロックを無視するのは簡単な解決策です。チームがこの変更を理解し、同意することを確認してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.