javascript - 如何有选择地导入 ES2015 模块函数,但带有命名空间?

标签 javascript d3.js module ecmascript-6 rollupjs

我开始使用 Rollup 和 D3 版本 4,它是用 ES2015 模块编写的。我使用传统的 D3 命名空间“d3”编写了一些代码。现在我想使用 Rollup 创建一个自定义包。我想使用 tree-shaking,因为我可能只使用了 d3 中大约一半的函数,而且我想尽可能地保持轻便。

我很清楚我可以有选择地导入函数,例如:

import {scaleLinear} from "d3-scale";
import {
      event,
      select,
      selectAll
} from "d3-selection";

这很快就会变得非常冗长,因为 d3 的一半是很多函数。我可以忍受这一点。更大的问题是它还需要在没有 namespace 的情况下完全重写我所有的函数标识符。我不太关心这个,因为我更喜欢命名空间库代码。

我知道我可以导入所有模块:

import * as d3 from "d3";

它保留了 d3 对象命名空间,这对我的代码组织很有用。但是 Rollup 无法将未使用的函数从 bundle 中移除。

我的梦想是这样的:

import {
      event,
      select,
      selectAll
} as d3 from "d3-selection";

但规范中似乎不存在此类功能/语法。我如何才能有选择地定位模块的各个部分,并在导入过程中保留命名空间?

最佳答案

为此您需要一个重新导出模块:

export {
      event,
      select,
      selectAll
} from "d3-selection";

import * as d3 from './d3';

关于javascript - 如何有选择地导入 ES2015 模块函数,但带有命名空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39689906/

相关文章:

javascript - 如何在 JavaScript 中合并两个对象数组

javascript - D3.js 在鼠标移出时恢复以前的颜色

javascript - 使用 D3 查找 svg 元素的标签名称

ios - @导入X;导致错误 Could not build module X

python - 类型错误 : Error when calling the metaclass bases module

javascript - 如何在 d3 和 SVG 中创建阴影路径?

javascript - Node.js 服务器延迟

javascript - Promise.resolve - 意外的结果

javascript/D3 基础知识 : If asynchronous call, 为什么代码在 json 请求之外?

javascript - 以 Angular 使用多个模块有什么好处?