在javascript es6中使用... spread语法命名为exports

Rob*_*cki 18 javascript babel ecmascript-6 spread-syntax ecmascript-next

我试图从库中导入所有内容作为哈希,修改它,并重新导出修改后的哈希,而不知道库中的所有命名导出.例如:

import * as reactBootstrap from 'react-bootstrap';

wrappedReactBootstrap = doFunnyThingsTo(reactBootstrap);

export {
  ...wrappedReactBootstrap
};

// or
export wrappedReactBootstrap;
Run Code Online (Sandbox Code Playgroud)

我对https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/export的理解是规范不允许以下内容.有人可以证实吗?

显然,循环是不可能的,因为导出和导入语句必须是顶级的.

Est*_*ask 22

对象休息传播是第3阶段提案,而不是任何规范的一部分(可能会包含在ES2018中).

更重要的是,export具有模仿现有JS语法但不解释{ ... }为表达式的语法.export语法是严格定义的,因为ES2015模块应该进行静态分析.这是它们的一个好处,但它要求开发人员明确指定导出和导入.

由于{ ...wrappedReactBootstrap }引入了动态导出(这里确实用于此目的),ES2015模块不支持export它,并且它不太可能.

如果需要为导出提供动态行为,则可以将其导出和导入为命名或默认对象.

import * as reactBootstrap from 'react-bootstrap';

export default doFunnyThingsTo(reactBootstrap);
Run Code Online (Sandbox Code Playgroud)

并使用像

import wrappedReactBootstrap from '...';

const { funny, thing } = wrappedReactBootstrap;
Run Code Online (Sandbox Code Playgroud)

显然,wrappedReactBootstrap对象不会以这种方式获得ES2015模块的好处,例如树木摇晃.