2017-05-30 10 views
56

release of [email protected]では、npm-shrinkwrap.jsonが既に存在する場合を除き、package-lock.jsonとなります。警告が印刷されますnpm-shrinkwrap.jsonとpackage-lock.jsonの違いは何ですか?

npm install 

::だから

npm WARN read-shrinkwrap This version of npm 
is compatible with [email protected], 
but npm-shrinkwrap.json was generated for [email protected] 
I'll try to do my best with it! 

npm-shrinkwrap.jsonが中に発見された場合、今

npm install [email protected] -g 

そして:

私は経由して、グローバルのNPM @ 5をインストール私の持ち帰りは、シュリンクラップをpackage-lock.jsonに置き換えなければならないということです。

なぜ新しいフォーマットがありますか? package-lock.jsonは何をすることができますかnpm-shrinkwrap.jsonできませんか?

答えて

43

ファイルは、まったく同じ内容を持っていますが、NPMがそれらをどのように扱うかの違いの一握り、a docs file in the npm repo that starts by explicitly addressing the difference between these two filesにもthe docs siteに説明してあります。

  • package-lock.jsonnpm-shrinkwrapのに対し、NPMに公開されることはありませんがデフォルトでは
  • package-lock.jsonファイルは無視されますが、依存関係にあるシュリンクラップファイルは無視されます。
  • のみnpm shrinkwrapを実行することにより、NPM 5+

あなたがnpm-shrinkwrap.json既存package-lock.jsonに変換することができによって認識されるのに対し、は、NPMバージョン2、3、及び4との下位互換性があります。したがって

  • あなたがNPMにあなたのパッケージを公開していない場合は、これら2つのファイルの選択はあまり重要です。 package-lock.jsonを使用することをお勧めします。これはデフォルトであり、その名前は初心者からnpmに明確です。また、開発チームの誰もがnpm 5+以上であることを確認することが困難な場合は、npm-shrinkwrap.jsonをnpm 2-4との下位互換性のために使用することをお勧めします。 (npm 5は2017年5月25日にリリースされたことに注意してください;ほとんどの人が最終的にアップグレードするので、後方互換性はそれだけ重要ではなくなります)
  • です依存関係のバージョンがインストールされている正確に記録するためにpackage-lock.jsonを使用しますが、あなたのパッケージをインストールし、人々があなたのpackage.jsonによって決定されるバージョンの範囲と互換性のある依存関係のいずれかのバージョンを使用することができ

    1. :、あなたは間の選択肢を持っています、または
    2. npm-shrinkwrap.jsonは、あなたのパッケージをインストールし、誰もがドキュメントに(非常に簡潔に)説明した公式見解は、オプション1は、おそらくために(ライブラリ用に使用されるべきであるということである


    すべての依存関係の正確同じバージョンを取得することを保証するために多くのパッケージ依存関係がすべて同じ2次依存関係のわずかに異なるバージョンに依存する場合に発生するパッケージ複製の量を減らすため)、オプション2はグローバルにインストールされる実行可能ファイルに対して合理的かもしれません。

+0

+1 - あなたの2番目の箇条書きポイントを明確にすることはできますか?その動作とnpm-shrinkwrapの違いは何ですか? – Rhys

+0

@Rhys 2番目の弾丸は、何か変わったことをしない限り、実際には問題になりません。基本的には、もしライブラリがなんらかの形で* package-lock.jsonを公開していれば(それは不可能です)、そのライブラリを他のパッケージの依存関係としてインストールするのであれば、ライブラリの 'package -lock.json'はNPMによって無視されます。しかし、ライブラリが 'npm-shrinkwrap.json'を発行し、そのライブラリを依存関係としてインストールすると、ライブラリの' npm-shrinkwrapに指定されているすべての依存関係の正確なバージョン* .json'。 –

8

私は、--saveとshrinkwrapをデフォルトで実行することを考えていましたが、それが望ましくない場所で起こっているシュリンクラップの潜在的な問題を回避することだと思います。そこで、彼らは競合を避けるために新しいファイル名を与えました。 NPMから誰かがここでより徹底的にそれを説明した:

https://www.reddit.com/r/javascript/comments/6dgnnq/npm_v500_released_save_by_default_lockfile_better/di3mjuk/

関連する引用:

NPMは、デフォルトでは、あなたのソースディレクトリにほとんどのファイルを発行し、そして 人は何年もshrinkwrapsを公開されています。私たちは との互換性を望んでいませんでした。デフォルトで--saveとshrinkwrapを使用した場合、 があり、間違ってそれを作成し、 を介してレジストリに伝播し、基本的にdepsと 重複排除を無効にする可能性があります。

新しい名前が選択されました。そして我々は突然 のすべての新しい名前の種類を選んだ。新しいロックファイルを共有し、同じコードの基本的に全て、 まったく同じ形式

+3

回答にリンクされたコンテンツの関連部分を含めてください。あなたはそれを見積もりとしてマークすることができます。基本的に、答えはそれ自身で立つべきであり、リンクをたどる必要はありません。 – k0pernikus

16

Explanation from NPM Developer

アイデアは、シュリンクラップ技術の最新かつ グレイテストするパッケージlock.jsonのための間違いです、npm-shrinkwrap.jsonは になります。貴重な少数の人々のために予約されています。 は正確なnode_modulesを持っていて、人々にとっては特定のツリーをインストールするためにnpm @> = 2を使ってCIを欲しい人です。なしで をbそのnpmバージョンをumpしてください。

新しいロックファイル( "package-lock.json")は、基本的に同じコード(同じ番号 の名前を互いに入れ替えることができます)と同じ形式の同じコード をすべて共有します。それはまた、コミュニティが を理解しているようだ: "これはロックファイルを持っている"ので、非常に速くクリックするようだ。 人。最後に、新しいファイルを作成すると、親の投稿に記載されているallow-publicationのようなものが、 という奇妙なことをすることなくシュリンクラップと低リスクの後方互換性を持つことができました。

+9

私はまだ違いが明確ではない。 'npm-shrinkwrap'が正確なnode_modulesの場合....私は' package-lock.json'が正確にロックしていないと仮定しますか?もしそうなら、 'npm-shrinkwrap'がロックしていないことをロックしていないものはありますか? – dman

+0

あなたはそれが間違っている@dman。 package-lockはnpm-shrinkwrapの新しいバージョンです。パッケージロックはオプトアウトです(デフォルトで有効になっているので機能を削除する必要があります)。npm-shrinkwrapはオプトインです(デフォルトでは含まれていないため、有効にする必要があります)。彼らがパッケージロックを導入したのは、1.デフォルトで有効になっているので、依存関係に対処するための安全な方法をユーザが持つようになりました。その名前は、「シュリンクラップ(shrinkwrap)」のために、それが何であるかを意味する。 npm-shrinkwrapには、package-lockが現在持っていない特別な依存関係設定がいくつかありました。 npm-shrinkwrapは廃止されました。 – SeriousM

+2

これは間違っています。そのパッケージロックはnpm-shrinkwrapの新しいバージョンだと言って、あなたはそれが代用品であると言っています。 npm-shrinkwrapは廃止予定ではなく、package-lock.jsonとの違いがあります。さらに、package-lock.jsonは[バグがあります](https://github.com/npm/npm/issues/17091)、npm-shrinkwrapはそうしないので、もっと重視するので、同じコードではありません。 – dman

関連する問題