NVD3 + D3 +需要优化器:任何清洁解决方案?

时间:2014-03-25 00:54:15

标签: d3.js requirejs-optimizer nvd3.js

我正在尝试使用两个库:

  • D3(Javascript图形库)
  • NVD3(图表特定的D3扩展名)

我也在尝试使用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模块,但由于显而易见的原因,编辑第三方库是不好的做法,所以我更喜欢非编辑解决方案。

0 个答案:

没有答案