Javascript 是否可以合并或嵌套ES6导入?

Javascript 是否可以合并或嵌套ES6导入?,javascript,import,merge,ecmascript-6,Javascript,Import,Merge,Ecmascript 6,许多现代JavaScript库正在从单一的更新到模块化的npm包;有两个例子是和 这在减小建筑尺寸方面是很好的,但在导入时会有点尴尬。加载整个库时,我写: import d3 from 'd3'; let csv = d3.csv()... let xScale = d3.scale()... import d3_scale from 'd3-scale'; import d3_request from 'd3-request'; let csv = d3_request.csv()...

许多现代JavaScript库正在从单一的更新到模块化的npm包;有两个例子是和

这在减小建筑尺寸方面是很好的,但在导入时会有点尴尬。加载整个库时,我写:

import d3 from 'd3';

let csv = d3.csv()...
let xScale = d3.scale()...
import d3_scale from 'd3-scale';
import d3_request from 'd3-request';

let csv = d3_request.csv()...
let xScale = d3.scale.scaleLinear()...
当加载单个模块而不是整个包时,我写道:

import d3 from 'd3';

let csv = d3.csv()...
let xScale = d3.scale()...
import d3_scale from 'd3-scale';
import d3_request from 'd3-request';

let csv = d3_request.csv()...
let xScale = d3.scale.scaleLinear()...

是否有一种语法允许我合并我的导入,这样我就可以从单个对象(例如,
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()...
});

另一种方法是这样做

创建一个文件d3-modules.js:

export * from 'd3-request';
export * from 'd3-scale';
然后在需要时导入该文件:

import * as d3 from "./d3-modules.js";

实际上,这是d3自己的做法:

是否有可能将其格式设置得更好?双斜杠是怎么回事?它是
constd3=Object.assign({},d3\u请求,d3\u刻度)
。在ES6中,传播是针对易受攻击的,而对象不是。是第二阶段的建议。@estus没关系,我不是在寻找一个ES6特定的答案,我在寻找一个在我的构建管道(Babel.js)中有效的答案。所以ES7选项对我很有用。但请随意写下来作为一个单独的答案,我会投票。如果把它们都放在同一个物体上,会有什么好处?把独立的事情分开是一个重点。为什么你们“必须写…”?您可以导入整个package@Amit正如我在问题中所解释的,我不想导入所有的
d3
,因为它是一个大软件包,我可以通过只导入其中的一个子集来降低构建大小。@loganfsmyth d3的许多函数都是用于常见操作(例如,绘制图表)的,尽管存在不同的模块。它们存在于不同的名称空间中,这是因为它们是如何为npm绑定的,但它们都感觉像是同一个库的一部分(从历史上看,d3代码就是这样编写的)。是的,但是像第二个示例中那样的前缀不正是实现这种公共关联的吗?例如,将它们混合到一个对象中,就不可能知道是否忘记导入和合并要使用的函数。相同的对象=>相同的库似乎是您决定的映射,我不同意。