2015-01-13 15 views
15

私のフロントエンドコードでは、require()を使用してライブラリを取得します。ライブラリはUnderscore.jsの異なるバージョンに依存しています。その結果、私がbrowserifyを使ってすべてを束ねると、出力にアンダースコアの複数のコピーが含まれます。 require('underscore')は常に特定のファイルをインポートする必要があることをブラウザに伝える方法はありますか?私はバンドルを作成するとき複数のサブ依存関係をbrowserifyに含めないようにするにはどうすればよいですか?

// main.js 
var Backbone = require('backbone'); 
var Marionette = require('backbone.marionette'); 
console.log("Hello, world!"); 

、アンダースコアの複数のバージョンがあります:私は両方のライブラリを使用しmain.js

// package.json 
"dependencies": { 
    // Depends on underscore 1.7.0 
    "backbone": "^1.1.2", 

    // Depends on underscore 1.6.0 
    "backbone.marionette": "^2.3.0" 
} 

問題のデモンストレーションとして

、私は次の依存関係を持っている想像付属:

PS> browserify main.js -o out.js 
PS> findstr _.VERSION out.js 
    _.VERSION = '1.7.0'; 
    _.VERSION = '1.6.0'; 

I created a GitHub repository with a more complete exampleそれを複製します。そして私は、次のように私のpackage.jsonbrowserセクションを追加しようとしたが、どんな効果を持っていないようでした)アクションでそれを見るために

npm install && npm testを実行します。

// package.json 
"browser": { 
    "underscore": "./node_modules/underscore/underscore.js" 
} 

npmが重複をインストールする理由を私は理解して(サーバー側のコードではこのようにするのが理にかなっていますが)browserifyを使用するときにこれを処理する正しい方法は何ですか?

答えて

10

同じバージョンを複数回読み込まないように、Browserifyに重複して検出されます。ただし、node_modulesツリーに同じモジュールの複数のコピーが含まれていると、この検出が失敗するはずです。

私が使用しているソリューションは、NPMとパッケージ構造を重複排除することです:

npm dedupe 

これが唯一のあなたの依存関係ツリーに避けられないdupesを残して、あなたができるように、それはそれらのdupesに関する警告をログに記録しますダブルチェック。

関連する問題