依存関係オブジェクトのpackage-lock.jsonには、requires
とdependencies
の両方のフィールドがあります。
"requires": {
"@angular-devkit/core": "0.8.5",
"rxjs": "6.2.2",
"tree-kill": "1.2.0",
"webpack-sources": "1.3.0"
},
"dependencies": {
"rxjs": {
"version": "6.2.2",
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.2.2.tgz",
"integrity": "sha512-0MI8+mkKAXZUF9vMrEoPnaoHkfzBPP4IGwUYRJhIRJF6/w3uByO1e91bEHn8zd43RdkTMKiooYKmwz7RH6zfOQ==",
"dev": true,
"requires": {
"tslib": "1.9.3"
}
}
}
これら2つの違いは何ですか?なぜ一部の依存関係はrequires
に、他の依存関係はdependencies
にリストされ、一部はこれらのフィールドの両方にリストされますか?
Barr J 回答に基づく詳細な説明:
デフォルトでは、npmはすべてのパッケージをnode_modules
に直接インストールします。
ただし、パッケージX
はバージョン1.0ではパッケージZ
に依存し、パッケージY
はバージョン2.0では同じパッケージZ
に依存するとします。 。この場合、このパッケージの2つのバージョンをインストールする必要があります。 1つはルートnode_modules
フォルダにインストールされ、もう1つは依存パッケージのnode_modules
フォルダにインストールされます。
package.json
node_modules
/X
/Y
/[email protected]
/[email protected]
この知識があれば、簡単に理解できます。
「requires」はpackage.json
ファイルの依存関係を反映し、「dependencies」はこの依存関係のnode_modulesフォルダーに実際にインストールされている依存関係を反映します。
docs.npmjs から始めましょう。
必須:
これは、モジュール名とバージョンのマッピングです。これは、インストール先に関係なく、このモジュールに必要なすべてのリストです。バージョンは、通常の一致ルールを介して、依存関係の依存関係または私たちよりも高いレベルの依存関係と一致する必要があります。
意味Requiresは、モジュールと、特定のモジュールが適切に機能するために必要なすべてのものを、どこにインストールしたかに関係なくマッピングしています。
たとえば、モジュールが機能するには、"@angular-devkit/core": "0.8.5",
を介してnpm i
をインストールする必要があります。
依存関係:
この依存関係の依存関係。トップレベルとまったく同じです。
それが聞こえるように。
違い:
Requiresは、アプリケーションを実行して適切に動作させるためにrequiredであるモジュールを示します。
Dependencies、アプリケーションの依存関係を、トップレベルとまったく同じ方法で一覧表示します。
物事をより明確にするための依存関係の意味
パッケージ名の依存オブジェクトへのマッピング。
上記の回答を読んだ後。多分もっと簡単な方法でそれを置くことができます
requires
はsharedにすることができますが、dependencies
はstandaloneであり、モジュールにのみ属しているため必要です
つまり.
"@angular-devkit/core": "0.8.5"
、"tree-kill": "1.2.0"
、"webpack-sources": "1.3.0"
はモジュールに属していませんのみ、モジュールが必要とするレベルと同じです。対照的に、"rxjs": "6.2.2"
モジュールが必要とするため、排他的に存在します。そして、それはモジュールによってのみ使用されます