2012-03-13 15 views
6

npmネストされた依存関係を管理するためのベストプラクティスについて質問があります。npmネストされた依存関係管理

私の状況を説明してください、私が間違っていることを教えてください、またはこれに近づく最良の方法は何ですか?

nodeenvでexpress.jsとexpress-mongostoreを使用しているアプリを実行しています。 nodeenvのため、私はすべてをグローバルにnpm-ingしているので、それらはすべてnenv/lib/node_modulesフォルダの下にあります。問題は、私は、急いで最先端のexpress.jsを開発しようとしていますが、express-mongostoreはしばらく更新されていません。両方のモジュールをインストールした後、私はこのフォルダ構造を取得します。

nodeenv/lib/node_modules/express/node_modules/connect/.. 
          /
          /connect-mongodb/node_modules/ connect/... 

だから私は2つの異なるバージョンの接続があるということです。

mongodbストアで生成されたクッキーとセッションミドルウェアで生成されたクッキーが異なる2つのconnect utilsの実装を指しているため、焼き付きました(1つはutilと他のutilを直接呼び出すストアを呼び出します)。要求解決中に異なるファイルを指し示す)。実際の違いは、異なるアルゴリズムを使用してCookieに署名することです。しばらくの間、私のセッションはすべてのページの読み込みを無効にしていました。このレベルまでデバッグするまでには長い時間がかかりました。

私はインターネットで読んでいましたが、これはnpm方法といいことであると思われるようです。ここでの問題は、expressは接続と接続のutilsの束に依存しているので、mongodbはconnectの同じクラスのいくつかを継承します。異なるreposにすることは問題です。

私は現在2つのバージョンのconnectを持っていますが、私はもう一方のバージョンと同じようにパッチを当てました。これは持続可能な解決策ではないことは明らかです。この場合、依存関係管理をどのように進めてアプローチする必要がありますか?

ありがとうございます!

答えて

3

npm dedupeを実行すると、ツリー上の互換性のある依存関係を移動できます。したがって、expressとconnect-mongodbが同じバージョンのconnectで動くと仮定すると、次のようなツリーになります:

nodeenv/lib/node_modules/express/... 
          /
          /connect-mongodb/... 
          /
          /connect/... 
-3

2つのモジュール間で基本的な非互換性があります。これらのモジュールは、相互に協力し合うことが前提です。

これはNPMの欠陥でも設計上の欠陥でもありません。あなた自身で論理問題を解決する必要があります。

関連する問題