2015-10-20 91 views
2

我正尝试在项目中使用d3-arrays。该模块本身包含原始ES6模块和UMD构建。我希望能够直接将它作为依赖项添加到我的ember-cli项目中并使其可用,但事实并非如此。无法将ES6 NPM模块直接导入到Ember CLI中

我见过超过一年的建议说使用ember-browserify,其他人建议做垫片,但AFAIK这真的只会是理想的,如果它是一个凉亭的依赖,并且凉亭似乎是在路上出。

为了正确,我怎样才能将这个模块导入,好像它是我的项目的一部分,并且将它作为import {mean} from 'd3-arrays使用,而无需首先将其转换为另一个封装格式?

我已经试过使垫片刚刚出口进口UMD代码:

// index.js 
var d3ArraysExports = require('d3-arrays'); 
d3ArraysExports.name = 'd3-arrays-shim'; 
module.exports = d3ArraysExports; 

灰烬发现该模块就好了,但它从来没有被添加到要求的条目列表。

如果在Ember CLI中有一些设计决定为什么这样做不起作用,请将它指向我。

+0

贵垫片启用命名进口(如'进口{FOO}从“栏”'太命名进口是'烬-browserify'一个已知的警告,但与安装,你可以吗?只需从'npm:d3arrays''导入d3arrays并使用该方法(d3arrays.mean([1,2]))等。 –

+0

我遇到了同样的问题。我想使用一些模块d3.js就像d3-arrays,d3-scale等等。对于这个问题,首选解决方案是什么?我需要为它们创建一个shim lib吗?请指导。 – NkS

回答

0

我想出了一个优雅的解决方案是:

我创建了从D3阵列进口ES6来源,并使它们可供花椰菜垫片库。这里有一个例子:

var path = require('path'); 

module.exports = { 
    name: 'd3-arrays', 

    treeForAddon: function() { 
    var packagePath = path.join(this.project.addonPackages['ember-d3-arrays-shim'].path, 'node_modules', 'd3-arrays'); 
    var d3ArraysTree = this.treeGenerator(packagePath); 
    return this._super.treeForAddon.call(this, d3ArraysTree); 
    } 
};