【问题标题】:Cannot import ES6 NPM module directly in to Ember CLI无法将 ES6 NPM 模块直接导入 Ember CLI
【发布时间】:2015-10-20 16:05:47
【问题描述】:

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

我看到一年多以前的建议说要使用 ember-browserify,还有其他建议做一个 shim,但是 AFAIK 这只有在它是一个 bower 依赖项时才是理想的,而且 bower 似乎在出路。

为了正确起见,我怎样才能将这个模块作为我项目的一部分导入并用作import {mean} from 'd3-arrays,而无需先将其转换为另一种包格式?

我尝试过制作一个仅导出导入的 UMD 代码的 shim:

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

Ember 发现这个模块很好,但它从未被添加到需要条目列表中。

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

【问题讨论】:

  • 您的 shim 是否也启用了命名导入(例如 import {foo} from "bar"?命名导入是 ember-browserify 的一个已知警告,但安装后您可以执行 import d3arrays from "npm:d3arrays" 并通过它使用方法(d3arrays.mean([1,2])) 等
  • 我遇到了同样的问题。我想使用 d3.js 的一些模块,如 d3-arrays、d3-scale 等。这是首选的解决方案。我是否需要为所有这些创建一个 shim 库?请指导。

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


【解决方案1】:

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

我创建了一个 shim 库,它从 d3-arrays 导入 ES6 源代码,并使它们可用于 broccoli。这是一个例子:

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);
  }
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-23
    • 2023-03-10
    • 2016-12-23
    • 2017-11-08
    • 2015-11-27
    • 2021-12-08
    相关资源
    最近更新 更多