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