导出导入的速记方式

5

我一直想用BabelJS来完成这个任务,但是我不确定Babel或规范目前是否支持它。

给定Outer.js

export default function() { }

下面的示例不起作用。
export Outer from './Outer'

使用 CommonJS 模块,这可以轻松地编写为:

exports.x = require('./x');

你可以使用以下代码:export * from './Outer'; - Rico Sta. Cruz
谢谢!我刚刚通过添加Outer.js可能包含的附加信息(module.exportsexport default)来澄清了一些事情。 - srph
2个回答

4

截至2015年4月3日BabelJS团队已于3天前发布了v5.0,其中包括他们在博客文章中所述的该简写的支持。

Lee Byron's stage 1 additional export-from statements proposal completes the symmetry between import and export statement, allowing you to easily export namespaces and defaults from external modules without modifying the local scope.

Exporting a default

export foo from "bar";

equivalent to:

import _foo from "bar";
export { _foo as foo };

旧答案:

这个导出符号表示

export v from "mod";

ES6不支持此功能(可以查看规范中的支持示例),但是它可以在ES7中得到支持(请参阅此提案)。

为了获得完全相同的结果,现在必须使用import

import Outer from './Outer';
export {Outer};

1
谢谢!只是一个问题——如果你熟悉 BabelJS(前身为 6to5),是否可以假定它们的 “实验性”选项支持这个提案?因为我正在使用 BabelJS(和 webpack)转译我的代码,并将 “实验性”选项设置为“true”,但似乎并没有起作用。 - srph
1
据我所知,Babel目前不支持此功能,除非使用experimental标志。我不知道Babel团队是否计划在不久的将来实现这个提案。但毕竟,该提案仅处于第一阶段。当它进入第二阶段时,Babel实现它将更有意义。 - alexpods
@srph 我已经更正了博客文章的链接。感谢您的更新! - alexpods
作为一个注意事项,如果你有同构模块,请确保在webpack和.babelrc中有兼容的babel选项。否则,你的浏览器捆绑包和节点模块将无法进行兼容的转译。 - JohnSz

3

TypeScript 1.5还支持ES 2015附加的export-from语句语法:

export { default as Injector } from './lib/Injector';

这将生成以下ES5代码:

var Injector_1 = require('./lib/Injector');
exports.Injector = Injector_1.default;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接