D3.js NVD3和x2B;D3和x2B;需要优化器:有清洁的解决方案吗?

D3.js NVD3和x2B;D3和x2B;需要优化器:有清洁的解决方案吗?,d3.js,requirejs-optimizer,nvd3.js,D3.js,Requirejs Optimizer,Nvd3.js,我尝试使用两个库: D3(Javascript图形库) NVD3(特定于图形的D3扩展) 我还尝试使用Require优化器,这就是问题的症结所在。D3与AMD兼容,因此如果它检测到您正在使用Require,它将定义一个模块,而不会导出全局D3变量。NVD3没有AMD的支持,但需要有“垫片”的情况下 但是,如果我“填充”NVD3并给该填充一个依赖项D3,它就不起作用了,因为NVD3希望有一个全局D3变量,而D3不会在Require环境中生成该变量。因此,为了解决这个问题,我制作了一个新模块(d

我尝试使用两个库:

  • D3(Javascript图形库)
  • NVD3(特定于图形的D3扩展)
我还尝试使用Require优化器,这就是问题的症结所在。D3与AMD兼容,因此如果它检测到您正在使用Require,它将定义一个模块,而不会导出全局
D3
变量。NVD3没有AMD的支持,但需要有“垫片”的情况下

但是,如果我“填充”NVD3并给该填充一个依赖项D3,它就不起作用了,因为NVD3希望有一个全局
D3
变量,而D3不会在Require环境中生成该变量。因此,为了解决这个问题,我制作了一个新模块(d3Shim),它只需要D3,然后将其注册为全局变量:

define(['d3'], function(d3) {
    return window.d3 = d3;
});
我让NVD3依赖于d3Shim,然后一切正常。。。在正常情况下,我们需要土地。当我尝试使用require优化器将所有内容合并到一个文件中时,我发现NVD3再次开始崩溃,因为缺少
d3
变量

结果表明,优化器对垫片执行以下操作:

*shimmed code here*
define(*shim path*, [], function(){});
所以,不管我有什么依赖关系,NVD3代码都会在d3shim模块发挥作用之前运行

我的问题是,是否有任何方法可以将这两个库与Require优化器一起使用,而不必修改任何一个文件?如果有必要,我可以随时编辑NVD3的代码,使其成为AMD模块,但由于明显的原因,编辑第三方库是不好的做法,所以我更喜欢非编辑解决方案