27

我正在尝试将库中的所有内容作为哈希导入,对其进行修改,然后重新导出修改后的哈希,而不知道库中的所有命名导出。例如:

import * as reactBootstrap from 'react-bootstrap';

wrappedReactBootstrap = doFunnyThingsTo(reactBootstrap);

export {
  ...wrappedReactBootstrap
};

// or
export wrappedReactBootstrap;

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

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

4

1 回答 1

32

Object rest spread 是第 3 阶段的提案,不是任何规范的一部分(可能会包含在 ES2018 中)。

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

由于{ ...wrappedReactBootstrap }引入了动态导出(这里正是为此目的使用它),它不受 ES2015 模块支持,而且export不太可能支持。

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

import * as reactBootstrap from 'react-bootstrap';

export default doFunnyThingsTo(reactBootstrap);

并像使用

import wrappedReactBootstrap from '...';

const { funny, thing } = wrappedReactBootstrap;

显然,wrappedReactBootstrap对象不会以这种方式获得 ES2015 模块的好处,例如 tree-shaking。

于 2017-04-08T21:52:03.717 回答