5

いくつかのノード パッケージをインストールしてきましたが、NPM が大量の重複を作成していることに気付きました。

たとえば、私は最初に mongoose をインストールしました。これにより、多数の依存関係が自然にインストールされました。次に、依存関係として bson も付属している mongodb パッケージをインストールしました。依存関係が重複しているため、次の異常があります。

Mongodb は次のディレクトリにあります。

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

また、mongodb の依存関係である bson は、これらの両方に存在します。

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

これらはキロバイトのファイルに過ぎないことはわかっていますが、これにより多くの冗長性が生じる可能性があり、最終的に次のような非常に複雑なツリーになる可能性があると感じています。

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

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

私の主な関心事は、これらのモジュールの更新に関連しています。異なるバージョンの並行モジュールを同時にインストールすることは想像に難くありません。

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

4

1 に答える 1

3

問題は、mongoose がたとえば mongodb の v1 でのみ動作するようにコーディングされていて、アプリが mongodb の v2 で動作するようにコーディングされている場合です。そのため、両方のバージョンをインストールしてロードするため、すべてが動作します。ノードではこれを簡単に行うことができます。これは、ブラウザとは異なり、require モジュールの方法がグローバル名前空間を汚染しないためです。これにより、グローバル名前空間の汚染により、適切な依存関係を管理および含めることが非常に困難になります。

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

于 2013-04-11T12:18:06.423 に答える