ES6 `export * from import`?

105

有没有使用ES6、ES7或babel的语法可以让我轻松地捆绑许多子文件组?

例如,给定:

./action_creators/index.js
./action_creators/foo_actions.js
./action_creators/bar_actions.js

将foo和bar actions导入到index.js中,然后重新导出它们,这样我就可以

import {FooAction, BarAction} from './action_creators/index.js'

如果我要更改对象本身所组织的文件,我不想记住/更改引用。

3个回答

161

是的,ES6支持直接导出已导入的模块:

export { name1, name2, …, nameN } from …;

export {FooAction, BarAction} from './action_creators/index.js'

您也可以使用 * 语法重新导出已导入模块的所有导出项:

export * from …;

export * from './action_creators/index.js';

更多信息请查看MDN。


51
这个答案对我有用:使用export { default as foo } from './foo';来重新导出另一个模块的默认导出。 - clodal
8
这个语法不起作用:export * as something from './something'。有什么想法吗? - Qwerty
15
目前你不能像那样导出命名空间。参见https://github.com/tc39/proposal-export-ns-from关于该提案的内容。在此期间,你可以做以下操作之一:import * as Something from './something'; export { Something } - Jasmine Hegman
3
如果两个连续的 export * from ... 行导出了同名的命名函数会发生什么?我的意思是,如果 export * from 'a';export * from 'b'; 都定义了一个同名的函数并导出它,例如:export function fn() { ... } - tonix
6
我来到这里是想了解为什么我不能使用 export * as something from ... 这个语法... 哈哈哈。 - Qwerty
显示剩余3条评论

74
默认导出为默认:
export {default} from './something';

默认导出为命名:
export {default as foo} from './something';

命名导出为默认

export {foo as default} from './something';

以“Named”为名的出口:

export {foo} from './something';

命名导出为重命名

export {foo as bar} from './something';

全部原样导出:

export * from './something';

6
export * from './something'; 的意思是“将模块中所有导出的内容都重新导出”。 - Morio
所有命名的导出作为所有命名的。 - skube
1
export * 实际上并不会导出 default,这不像 @skube 所说的那样。 - undefined

-1
出口和进口两次
import {DEV as dev} from '../dev'
export {DEV} from '../dev'
export const PROD = !dev

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