使用。。。javascript es6命名导出中的扩展语法

使用。。。javascript es6命名导出中的扩展语法,javascript,ecmascript-6,babeljs,ecmascript-next,spread-syntax,Javascript,Ecmascript 6,Babeljs,Ecmascript Next,Spread Syntax,我试图将库中的所有内容作为散列导入、修改并重新导出修改后的散列,而不知道库中的所有命名导出。例如: import * as reactBootstrap from 'react-bootstrap'; wrappedReactBootstrap = doFunnyThingsTo(reactBootstrap); export { ...wrappedReactBootstrap }; // or export wrappedReactBootstrap; 我的理解是,规范不允许以下

我试图将库中的所有内容作为散列导入、修改并重新导出修改后的散列,而不知道库中的所有命名导出。例如:

import * as reactBootstrap from 'react-bootstrap';

wrappedReactBootstrap = doFunnyThingsTo(reactBootstrap);

export {
  ...wrappedReactBootstrap
};

// or
export wrappedReactBootstrap;
我的理解是,规范不允许以下情况。有人能确认吗

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

对象rest spread不是任何规范的一部分(可能会包含在ES2018中)

更重要的是,
export
具有模仿现有JS语法的语法,但不会将
{…}
解释为表达式。因为ES2015模块应该进行静态分析。这是它们的优点之一,但它要求开发人员明确指定导出和导入

由于
{…wrappedReactBootstrap}
引入了动态导出(此处正是出于此目的使用的),因此ES2015模块
导出不支持动态导出,而且不太可能支持动态导出

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

import * as reactBootstrap from 'react-bootstrap';

export default doFunnyThingsTo(reactBootstrap);
就像

import wrappedReactBootstrap from '...';

const { funny, thing } = wrappedReactBootstrap;
显然,
wrappedReactBootstrap
对象不会以这种方式获得ES2015模块的好处,例如树抖动