我正在尝试使用两个库:
我也在尝试使用Require Optimizer,这就是事情变得艰难的地方。 D3符合AMD标准,因此如果它检测到您正在使用Require,它将定义一个模块而不导出全局d3
变量。 NVD3没有AMD支持,但在这种情况下需要“垫片”。
但是,如果我“填充”NVD3并使该垫片成为D3的依赖,则它不起作用,因为NVD3期望有一个全局d3
变量,D3不会在需求中生成环境。因此,为了解决这个问题,我创建了一个新模块(d3Shim),它只需要D3,然后将其注册为全局变量:
define(['d3'], function(d3) {
return window.d3 = d3;
});
我让NVD3依赖于d3Shim,然后一切正常......在正常的需求范围内。当我尝试使用require-optimizer将所有内容合并到一个文件中时,我发现NVD3再次开始破坏,因为缺少d3
变量。
事实证明优化器为垫片做了这个:
*shimmed code here*
define(*shim path*, [], function(){});
因此,无论我有什么依赖关系,NVD3代码都会在d3shim模块发挥其魔力之前运行。
我的问题是,有什么方法可以将这两个库与Require Optimizer一起使用,而不必更改任何一个文件?如果有必要,我总是可以编辑NVD3的代码使其成为AMD模块,但由于显而易见的原因,编辑第三方库是不好的做法,所以我更喜欢非编辑解决方案。