无法直接将ES6 NPM模块导入Ember CLI

时间:2015-10-20 16:05:48

标签: javascript ember.js d3.js ember-cli

我试图在项目中使用d3-arrays。该模块本身包括原始ES6模块和UMD构建。我希望能够直接将它作为依赖项添加到我的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发现这个模块很好,但它永远不会被添加到require条目列表中。

如果在Ember CLI中有一些设计决定,为什么这不起作用,请指出。

1 个答案:

答案 0 :(得分: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);
  }
};