2016-07-07 10 views
1

私は2つのjspmモジュール、ModuleAとModuleBを持っています。どちらもd3.jsライブラリに依存しています。 ModuleAとModuleBに依存する第3のjspmモジュールModuleCがあります。 ModuleCを実行すると、ModuleAとModuleBの両方が単独で動作するにもかかわらず、d3エラーが発生します。ライブラリの同じインスタンスを常に返すようにSystemJSを設定します

これは、ModuleAがSystemJSが提供するd3インスタンスに機能を追加するd3プラグイン(nvd3)に依存しているためです。ただし、ModuleBが読み込まれると、このバージョンのd3が新しいバージョンのd3に置き換えられ、ModuleAが依存するプラグインが効果的に消去されます。

ModuleAとModuleBの両方に同じインスタンスd3を提供するようにSystemJSを設定するにはどうすればよいですか?

答えて

2

それを実演しました。 SystemJS はデフォルトで同じインスタンスのモジュールを提供します。ただし、要求されているモジュールは、同じソースの同じバージョンのでなければなりません。

私のケースでは、ModuleAはjspm install d3で直接d3に依存していましたが、G3のバージョンをGitHubから取得しました。 ModuleBは間接的にangular-nvd3という依存関係によってd3に依存していましたが、最終的にd3のnpmバージョンに解決されました。 SystemJSはこれらが同じライブラリであることを知る方法がなかったので、両方のバージョンをロードしました。

npmバージョンのd3(jspm install npm:[email protected])を使用するようにModuleAを更新すると、両方のモジュールがModuleCで正常に動作し、d3が1回だけロードされました。

関連する問題