Javascript 是否可以导出“的结果?”;导入*as";在2015年?

Javascript 是否可以导出“的结果?”;导入*as";在2015年?,javascript,ecmascript-6,es6-module-loader,Javascript,Ecmascript 6,Es6 Module Loader,在ES2015中,可以将整个模块作为属性为模块导出的对象导入: import * as name from 'module'; 我发现这对于名称空间非常有用,并且一直在使用它 还可以重新导出其他模块的导出: export { name } from 'module'; // selectively export * from 'other-module'; // indiscriminately 现在我正试图用这种风格编写一个具有名称空间的库。在顶级模块中收集所有内容的直观方式如下: exp

在ES2015中,可以将整个模块作为属性为模块导出的对象导入:

import * as name from 'module';
我发现这对于名称空间非常有用,并且一直在使用它

还可以重新导出其他模块的导出:

export { name } from 'module'; // selectively
export * from 'other-module'; // indiscriminately
现在我正试图用这种风格编写一个具有名称空间的库。在顶级模块中收集所有内容的直观方式如下:

export * as name from 'module';
但这似乎不起作用;Babel和Rollup都拒绝接受它

我可以将模块作为一个对象导入,通过迭代其键创建一个克隆,然后将其导出,但这样它将只是一个普通的旧动态对象,因此我将失去Rollup提供的巨大优势


那么,使用声明性模块语法真的没有办法做到这一点吗?在我看来,这是没有理由的。

不,这在ES6中被忽略了。不过,还有一些需要补充的地方

在此之前,您将需要使用两个声明和一个本地绑定,尽管不需要克隆对象:

import * as name from 'module';
export { name };

我不明白你想用“模块”中的
export*作为名称来完成什么。您打算如何使用这种出口产品?导入
*
始终需要命名空间
为X
,因此在导出语句中指定的任何名称都是无关的——对吗?@torazaburo
name
是导出模块对象时使用的名称。例如,如果模块“abc”包含从“xyz”
导出*为xyz,而您从“abc”导入*为abc,则您将能够通过
abc.xyz
访问“xyz”的导出。可能是重复的哦,太棒了!这正是我需要的!我不知道你需要花括号来做这件事,因为MDN不包括它们。MDN哪里不使用花括号?当然,在许多其他导出声明(默认值、变量等)中不需要它们不带大括号。此外,在描述中,它给出了以下示例:
export myFunction;//导出前面声明的函数
呃,那些文档似乎很少。最好看一下(我会去修复MDN)。顺便说一句,如果你检查后没有发现问题,那是因为我刚刚更改了它。第一次编辑,希望我没有搞砸。