web-dev-qa-db-ja.com

Package-lock.json-依存関係が必要

依存関係オブジェクトのpackage-lock.jsonには、requiresdependenciesの両方のフィールドがあります。

  "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にリストされ、一部はこれらのフィールドの両方にリストされますか?

22

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フォルダーに実際にインストールされている依存関係を反映します。

10

docs.npmjs から始めましょう。

必須:

これは、モジュール名とバージョンのマッピングです。これは、インストール先に関係なく、このモジュールに必要なすべてのリストです。バージョンは、通常の一致ルールを介して、依存関係の依存関係または私たちよりも高いレベルの依存関係と一致する必要があります。

意味Requiresは、モジュールと、特定のモジュールが適切に機能するために必要なすべてのものを、どこにインストールしたかに関係なくマッピングしています。

たとえば、モジュールが機能するには、"@angular-devkit/core": "0.8.5",を介してnpm iをインストールする必要があります。


依存関係:

この依存関係の依存関係。トップレベルとまったく同じです。

それが聞こえるように。


違い:

Requiresは、アプリケーションを実行して適切に動作させるためにrequiredであるモジュールを示します。

Dependencies、アプリケーションの依存関係を、トップレベルとまったく同じ方法で一覧表示します。

物事をより明確にするための依存関係の意味

パッケージ名の依存オブジェクトへのマッピング。

1
Barr J

上記の回答を読んだ後。多分もっと簡単な方法でそれを置くことができます

requiressharedにすることができますが、dependenciesstandaloneであり、モジュールにのみ属しているため必要です

つまり.

"@angular-devkit/core": "0.8.5""tree-kill": "1.2.0""webpack-sources": "1.3.0"はモジュールに属していませんのみ、モジュールが必要とするレベルと同じです。対照的に、"rxjs": "6.2.2"モジュールが必要とするため、排他的に存在します。そして、それはモジュールによってのみ使用されます

1
Guichi