【发布时间】:2019-03-08 20:03:32
【问题描述】:
在 ES2015 模块中,export * from 'someModule' 不会从“someModule”导出默认导出,而import * as m from 'someModule' 从“someModule”导入默认导出。
例如在module.js中:
export default 'default'
export const foo = 'foo'
在 proxy.js 中:
export * from './module'
在 bar.js 中:
import * as m from './module' // m is { foo: 'foo', default: 'default' }
import * as p from './proxy' // p is { foo: 'foo' }
我已经使用 webpack 4.29.6(零配置)对其进行了测试。
MDN 写道:
以下语法不会从 导入模块:
从……导出 *;
如果您需要导出默认值,请改写以下内容:
从 'mod' 导出 {default};
export * from 'someModule' 不从“someModule”导出默认导出是合理的,因为当前模块可能还想导出自己的默认模块。但是为什么import * 仍然包含默认导出?这是 ES2015 模块规范的预期行为吗?
【问题讨论】:
-
在我看来
import *包含所有已导出的内容似乎是合乎逻辑的。如果有原因导致 2 个导出之间存在差异(并且您已说明),则反映在导入上是正常的。 (如果它是另一种方式,默认将总是丢失,如果你考虑一下) -
我很惊讶 import 语句中的
*和 export 语句中的*不是同一个意思。在尝试之前我得到了错误的想法。
标签: javascript ecmascript-6 module