1

npm3 では、node_modulesフォルダーがフラットになるように依存関係のフラット化を使用するようになりました。どうやらそれは必ずしも真実ではありません。私は自分のアプリケーションを持っています。それに名前を付けましょう。A私が開発中のモジュールですB。そのモジュールにはgulp、依存関係といくつかのgulpプラグインがありますgulp-rename。私はアプリのフォルダーにgulpとがあることを期待していました(依存関係があるため)。しかし、そうではありません。実際にはありますが、それ自体はフォルダーにあります。gulp-renamenode-modulesABgulp-renameA/node_modulesgulpA/node_modules/B/node_modules

なぜこれが起こっているのか手がかりはありますか?

アップデート

問題をこの特定のケースに絞り込みました。

A私が開発しているアプリとモジュールを持っているB. そのモジュールにはgulp依存関係があり、bin次のように定義された package.json プロパティがあります (Bの package.json):

javascript "bin" { "gulp": "<some_valid_path>" }

gulpアプリのnode-modulesフォルダーにあることを期待していましたAB依存関係としてあり、npm3依存関係が平坦化されているため)。しかし、明らかにnpmはそれをA/node_modules/B/node_modulesフォルダーに残します。それは意図された動作であり、その理由は何ですか?

4

1 に答える 1

1

依存npm関係ツリーを可能な限り平坦化します。ただし、これは常に完全にフラットであることを意味するわけではありません。たとえば、依存関係 D1 が A ^1.0.0 に依存し、D2 が A ^2.0.0 に依存している場合、npm明らかに、これらの依存関係の両方をnode_modules同時にルートに配置することはできません。A の 1 つのバージョン (1.0.0 など) はルートに移動する場合があり、node_modules/D2/node_modulesD2 が親ディレクトリで検索を開始する前に正しいバージョンで A を検出できるように、もう 1 つのバージョンはルートに移動する必要があります。

于 2016-02-07T09:58:21.857 に答える