eri*_*oco 12 javascript import merge ecmascript-6
许多现代JavaScript库正在从单块更新到模块化的npm包; 一些例子是lodash和d3.
这在保持构建规模下降方面很好,但是对于导入来说有点尴尬.加载整个库时,我写道:
import d3 from 'd3';
let csv = d3.csv()...
let xScale = d3.scale()...
Run Code Online (Sandbox Code Playgroud)
当加载单个模块而不是整个包时,我写道:
import d3_scale from 'd3-scale';
import d3_request from 'd3-request';
let csv = d3_request.csv()...
let xScale = d3.scale.scaleLinear()...
Run Code Online (Sandbox Code Playgroud)
有没有一种语法允许我合并我的导入,所以我可以从一个对象(例如d3.csv(),d3.scaleLinear())中的每个包中进行所有函数调用?
当我写这个问题时,我想出了答案.自橡胶回避.
点差运算符在这里看起来很不错:
import * as d3_request from 'd3-request';
import * as d3_scale from 'd3-scale';
const d3 = {
...d3_request,
...d3_scale
};
d3.csv('path/to.csv', (error, data) => {
let xScale = d3.scale()...
});
Run Code Online (Sandbox Code Playgroud)
另一种方法是这样做
创建文件 d3-modules.js:
export * from 'd3-request';
export * from 'd3-scale';
Run Code Online (Sandbox Code Playgroud)
然后在需要的地方导入该文件:
import * as d3 from "./d3-modules.js";
Run Code Online (Sandbox Code Playgroud)
这实际上是 d3 自己如何做的:https : //github.com/d3/d3/blob/635d44786dd4322d0c89dd98546bff91d7cce0fe/index.js