2013-04-11 17 views
5

私はいくつかのノードパッケージをインストールしていますが、NPMが重複したものを作成していることがわかりました。ノードパッケージマネージャ(NPM)が重複パッケージを生成しているようです

例えば、私は最初に、たくさんの依存関係をインストールしたmongooseをインストールしました。それから私はmongodbパッケージをインストールしました。このパッケージはbsonに依存していました。

のMongoDBは、次のディレクトリに存在している:

/usr/local/lib/node_modules/mongodb/ 
/usr/local/lib/node_modules/mongoose/node_modules/mongodb/ 

/usr/local/lib/node_modules/mongodb/ 
/usr/local/lib/node_modules/mongoose/node_modules/mongodb/ 

また、BSONは、MongoDBのの依存性はこれらの両方に存在しているため、依存関係の重複に、私は次の異常を持っています

これらはキロバイト単位のファイルであることを認識していますが、これにより多くの冗長性が発生する可能性があります。次のような非常に複雑なツリーになります。

/usr/local/lib/node_modules/[something1]/node_modules/[something2]/node_modules/[something3/.../.../node_modules/[somethingX]/ 

このシナリオでは、特定の[依存関係]がXレベルの/ usr/local/lib/node_modulesに存在する可能性があります。

私の主な関心事は、これらのモジュールの更新に関するものです。私は、異なるバージョンの同時モジュールが同時にインストールされているとは想像もつきません。

すべてを直接/ usr/local/lib/node_modules /に置いて、相互参照の依存関係を作成する方が簡単ではないでしょうか?

答えて

3

問題は、mongooseがmongodbのv1と動作するようにしかコーディングされておらず、mongodbのv2で動作するようにアプリケーションをコーディングした場合です。つまり、両方のバージョンがインストールされ、すべて動作するようになります。ブラウザではなく、グローバルな名前空間を汚染しないため、適切な依存関係を管理することができます。

あなたのpackage.jsonとmongooseのpackage.jsonが同じmongodbバージョン(特定のバージョンを指定することができます)を許可している場合、rm -Rf node_modules; npm installを実行すると、2つではなくmongodbが1つだけインストールされます。しかし、前述のように、複数のバージョンが指定されている場合、複数のバージョンがインストールされ、ロードされます。

+0

これは、さまざまなモジュールをインストールし、さまざまなプロジェクトを開始した後、多忙な階層を作りませんか? NPMで再帰的な更新を実行する方法はありますか? – zcserei

+0

人々はいつもアップデートを続ける大きなモジュールではなく、モジュールの1つのコピーだけがインストールされるのではなく、いつか終了する小さなモジュールをコーディングしています。だから、ほとんどのノードモジュールが小さいので、現実にはそれほど大きな問題ではないことが分かります。そうでなければ、substack(James Halliday - http://substack.net/)をしばらく聞いています。しばらく前に、私はこの正確な問題に関するいくつかの考えをここに掲載しました:https://gist.github.com/balupton/5308717おそらくそれは私に時代を迎えてくれましたこれも同様です:) – balupton

+0

'もし[両方の] ...同じ[]バージョンを許可すると、1つのコピーのみがインストールされます。なぜそれはしないのですか?私は1つのコピーしか使用しないで、いくつかのコピーがインストールされている特定のケースを持っています。なぜなら、なぜか分かりませんが、インストールにはかなりの時間がかかります。 – Michael

関連する問題