あなたはおそらく次のようなものを持っています:
"typescript":"~2.1.6"
あなたにpackage.json
そのあなたのケースであることに、最新のマイナーバージョンへの更新をNPM2.4.1
編集:OPからの質問
しかし、「npm install」がロックファイルを変更する理由は説明されていません。ロックファイルは再現可能なビルドを作成するためのものではありませんか?その場合、semverの値に関係なく、同じ2.1.6バージョンを使用する必要があります。
回答:
これは、完全な依存関係ツリーをロックすることを目的としています。まあ言ってみればtypescript v2.4.1
必要ですwidget ~v1.0.0
。npmをインストールすると、インストールされますwidget v1.0.0
。後で仲間の開発者(またはCIビルド)がnpmインストールを実行して取得しますtypescript v2.4.1
が、widget
に更新されましたwidget v1.0.1
。これで、ノードモジュールが同期しなくなりました。これがpackage-lock.json
妨げるものです。
またはより一般的には:
例として、
パッケージA:
{"名前": "A"、 "バージョン": "0.1.0"、 "依存関係":{"B": "<0.1.0"}}
パッケージB:
{"名前": "B"、 "バージョン": "0.0.1"、 "依存関係":{"C": "<0.1.0"}}
そしてパッケージC:
{「名前」:「C」、「バージョン」:「0.0.1」}
これらがレジストリで使用可能なA、B、およびCの唯一のバージョンである場合、通常のnpmインストールAがインストールされます。
A@0.1.0-B@0.0.1-C@0.0.1
ただし、B @ 0.0.2が公開されている場合は、新しいnpmインストールAがインストールされます。
A@0.1.0-B@0.0.2-C@0.0.1は、新しいバージョンがBの依存関係を変更しなかったと想定しています。もちろん、新しいバージョンのBには、新しいバージョンのCと任意の数の新しい依存関係を含めることができます。そのような変更が望ましくない場合、Aの作成者はB@0.0.1への依存関係を指定できます。ただし、Aの作成者とBの作成者が同じ人物ではない場合、Aの作成者は、Bがまったく変更されていない場合に、新しく公開されたバージョンのCを取り入れたくないと言うことはできません。
OP質問2:では、私が正しく理解しているかどうかを確認しましょう。あなたが言っているのは、ロックファイルが二次依存関係のバージョンを指定しているにもかかわらず、package.jsonのあいまい一致に依存して、トップレベルの依存関係を決定しているということです。それは正確ですか?
回答:いいえ。package-lockは、で説明されているルートパッケージを含むパッケージツリー全体をロックしますpackage.json
。場合typescript
にロックされている2.4.1
あなたにpackage-lock.json
それが変更されるまで、それはそのように残っている必要があります。そして明日typescript
リリース版としましょう2.4.2
。私がブランチをチェックアウトして実行するとnpm install
、npmはロックファイルを尊重してインストールし2.4.1
ます。
詳細package-lock.json
:
package-lock.jsonは、npmがnode_modulesツリーまたはpackage.jsonを変更する操作に対して自動的に生成されます。中間の依存関係の更新に関係なく、後続のインストールで同一のツリーを生成できるように、生成された正確なツリーについて説明します。
このファイルは、ソースリポジトリにコミットすることを目的としており、さまざまな目的で使用されます。
チームメイト、デプロイメント、継続的インテグレーションがまったく同じ依存関係を確実にインストールできるように、依存関係ツリーの単一の表現を説明します。
ユーザーがディレクトリ自体をコミットする必要なく、node_modulesの以前の状態に「タイムトラベル」する機能を提供します。
読みやすいソース管理の差分を使用して、ツリーの変更の可視性を高める。
また、npmが以前にインストールされたパッケージのメタデータ解決の繰り返しをスキップできるようにすることで、インストールプロセスを最適化します。
https://docs.npmjs.com/files/package-lock.json