2013-08-14 19 views
8

package.jsonファイルに記載されている依存関係をインストールするのにnpm install --devを使用しました。すべてのパッケージをフラットな構造でインストールするのではなく、ディレクトリ。npmは奇妙な再帰的な方法で依存関係をインストールしています

多くの依存関係はすでに満足していたはずですが、別の入れ子になったディレクトリにそれらを再ダウンロードする必要があったため、取り消しが必要でした(ループがないことを願っています。

├── grunt-cli 
│   └── node_modules 
│    ├── findup-sync 
│    │   └── node_modules 
│    │    ├── glob 
│    │    │   └── node_modules 
│    │    │    ├── minimatch 
│    │    │    │   └── node_modules 
│    │    │    │    ├── lru-cache 
│    │    │    │    │   └── node_modules 
│    │    │    │    │    └── weak 
│    │    │    │    │     └── node_modules 
│    │    │    │    │      └── mocha 
│    │    │    │    │       └── node_modules 
│    │    │    │    │        ├── coffee-script 
│    │    │    │    │        │   └── node_modules 
│    │    │    │    │        │    └── jison 
│    │    │    │    │        │     └── node_modules 
│    │    │    │    │        │      └── browserify 
│    │    │    │    │        │       └── node_modules 
│    │    │    │    │        │        ├── browser-resolve 
│    │    │    │    │        │        │   └── example 

すべてのアイデアは、なぜこれが起こっされることがあります。最終的に、これは私が取得しています何の一例であるtreeコマンドを使用して...

)終了?

答えて

14

実際にNpmが設計された方法だと心配しないでください。あなたは同じモジュールが何度もインストールされているのを見ることさえあります(通常はバージョンが異なります)。

考えられるのは、node_modulesの下にインストールされた各モジュールは、そのモジュールの依存関係と必要なバージョンのモジュールのインストールです。グローバルにインストールされたモジュールには依存しません。

モジュールを複数回インストールすることの非効率性が懸念される場合は、実験npm dedupeをお試しください。

+1

なぜですか?私はウェブを検索するときにこのアプローチの有効な議論を見つけるのに苦労しています。グローバルにインストールする、またはフラットな構造を使用することで何が問題になりますか?これは実際にどのような問題を解決しますか?フラットな構造にすべてをインストールし、競合を避けるためにディレクトリ名にバージョンを含めるのと同じようです。現在の実装は非常に非効率的です。 – Danny

+2

この記事をチェックアウト@Danny:http://dontkry.com/posts/code/modules-the-right-way.html – jackyalcine

+1

THANKS @jackyalcineそのリンクです。私はNPMに非常に不満でした。しかし、この記事ではすべてをクリアし、ディレクトリの深さの問題を管理するためのすばらしいツールを提供しています。 (はい、私は悲しいことに、windozを使用しています)。 –

2

と重複しています.Jonathan Wardenは言う。しかし、try npm3。 gulp-jscsのような単純なパッケージの場合、npm3のインストールは20%少なく、ディスク容量は5%少なくなりました。ツリーの深さは22から5になりました。しかし、npm3は私にとって2倍遅かったです。

関連する問題