如何有选择地导入ES2015模块功能,但是使用命名空间?

Ben*_*Ben 10 javascript module d3.js ecmascript-6 rollupjs

我开始使用Rollup和D3版本4,它是用ES2015模块编写的.我使用传统的D3命名空间"d3"编写了一些代码.现在我想使用Rollup创建一个自定义包.我想使用树摇晃,因为我可能只使用了d3中大约一半的功能,我希望尽可能保持光线.

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

import {scaleLinear} from "d3-scale";
import {
      event,
      select,
      selectAll
} from "d3-selection";
Run Code Online (Sandbox Code Playgroud)

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

我明白我可以导入所有模块:

import * as d3 from "d3";
Run Code Online (Sandbox Code Playgroud)

它保留了d3对象命名空间,这对我的代码组织很有用.但是,Rollup无法将未使用的功能从树中摇出来.

我梦寐以求的是:

import {
      event,
      select,
      selectAll
} as d3 from "d3-selection";
Run Code Online (Sandbox Code Playgroud)

但是这种特征/语法似乎不存在于规范中.如何有选择地定位模块的各个部分,并在导入期间保留命名空间?

Est*_*ask 4

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

export {
      event,
      select,
      selectAll
} from "d3-selection";
Run Code Online (Sandbox Code Playgroud)
import * as d3 from './d3';
Run Code Online (Sandbox Code Playgroud)