我有两个jspm模块,ModuleA和ModuleB。两者都依赖于d3.js库。我有第三个jspm模块ModuleC,它依赖于ModuleA和ModuleB。当我运行ModuleC时,我得到了d3错误,即使ModuleA和ModuleB都是孤立的。
这种情况正在发生,因为ModuleA依赖于d3插件(nvd3),它为SystemJS提供的d3实例添加了功能。但是,当ModuleB加载时,它会用自己的新版本d3替换这个版本的d3,有效地删除了ModuleA所依赖的插件。
如何配置SystemJS以向ModuleA和ModuleB提供相同的d3实例?
答案 0 :(得分:2)
想出来。默认情况下,SystemJS 提供相同的模块实例。但是,请求的模块必须是来自同一源的和版本。
在我的情况下,ModuleA直接依赖于d3,通过jspm install d3
,它从GitHub中删除了它的d3版本。 ModuleB通过angular-nvd3
的依赖间接依赖于d3,最终解析为d3的npm版本。因为SystemJS无法知道这些是同一个库,所以它加载了两个版本。
一旦我更新了ModuleA以使用npm版本的d3(jspm install npm:d3@3.5.17
),这两个模块在ModuleC中运行良好,而d3只加载了一次。