1. ホーム
  2. npm

[解決済み] npm-shrinkwrap.jsonとpackage-lock.jsonの違いは何ですか?

2022-04-14 04:42:34

質問

とは npm@5 のリリース を記述するようになりました。 package-lock.json がなければ npm-shrinkwrap.json が既に存在する。

経由でnpm@5をグローバルにインストールしました。

npm install npm@5 -g

そして今、もし npm-shrinkwrap.json の間に発見される。

npm install

という警告が表示されます。

npm WARN read-shrinkwrap This version of npm
is compatible with lockfileVersion@1,
but npm-shrinkwrap.json was generated for lockfileVersion@0.
I'll try to do my best with it!

つまり、私が得た情報は、シュリンクラップを package-lock.json .

それなのに、なぜ新しいフォーマットがあるのでしょうか。は何ができるのでしょうか? package-lock.json は、その npm-shrinkwrap.json はできないのですか?

どのように解決するのですか?

この2つのファイルは全く同じ内容ですが、npmの処理方法にはいくつかの違いがあります。 パッケージロック.json npm-shrinkwrap.json :

  • package-lock.json は決して npm にパブリッシュされないのに対し npm-shrinkwrap はデフォルトで
  • package-lock.json トップレベルパッケージに含まれないファイルは無視されますが、依存関係にある shrinkwrap ファイルは尊重されます。
  • npm-shrinkwrap.json はnpmのバージョン2、3、4と後方互換性があるのに対し package-lock.json は npm 5+ でしか認識されません。

既存の package-lock.jsonnpm-shrinkwrap.json を実行することで npm shrinkwrap .

このように

  • npmにパッケージを公開しないのであれば、この2つのファイルの選択はあまり重要ではありません。この場合 package-lock.json というのも、この名前はデフォルトであり、npm の初心者にもわかりやすいからです。 npm-shrinkwrap.json 開発チームの全員がnpm 5+を使用していることを確認するのが困難な場合、npm 2-4との後方互換性を確保するため。(なお、npm 5は2017年5月25日にリリースされました。後方互換性はその日から遠ざかれば遠ざかるほど、ほとんどの人がいずれアップグレードするため、あまり重要ではなくなります)。

  • もし、あなたが パッケージをnpmに公開する場合、次のどちらかを選択することになります。

    1. を使用しています。 package-lock.json を使用してインストールした依存関係のバージョンを正確に記録しますが、 あなたのパッケージをインストールする人は、あなたの package.json または
    2. を使用しています。 npm-shrinkwrap.json を使うことで、あなたのパッケージをインストールするすべての人に まさに すべての依存関係が同じバージョンであること



    ドキュメントに書かれている公式見解は、ライブラリにはオプション1を使うべきで (おそらく、あるパッケージの多くの依存関係がすべて同じ二次依存関係のわずかに異なるバージョンに依存している場合に生じるパッケージの重複の量を減らすために)、グローバルにインストールされる実行ファイルにはオプション2が妥当かもしれない、というものです。