18

我和我的同事发生了争执,我们似乎无法从任何官方来源(MDN、webpack 文档……)找到答案。我的研究也没有什么收获。即使在进口方面似乎也存在疑问。

我们的设置是 Webpack、Babel 和一个典型的 React / Redux 应用程序。举个例子:

export * from './actions';
export * from './selectors';
export * from './reducer';

export { default } from './reducer';

这允许我将 Redux 模块分成逻辑部分,使代码更易于阅读和维护。

但是,我的一些同事认为export * from,实际上可能会损害webpack的 tree-shaking 能力,因为它会欺骗它相信一个出口实际上只是被重新出口。

所以我的问题是,是否有任何事实证明或反驳这一点?

4

1 回答 1

14

人们认为这export * from可能会损害 webpack 的 tree-shaking 能力,通过诱骗它相信一个导出被使用,而实际上它只是被重新导出。

不,导入/导出声明除了为导出的变量设置别名之外什么都不做,它们不算作“使用”。鉴于它们的语义,它们会被任何捆绑器专门跟踪,并且不会对 tree-shaking 产生不利影响。

即使是正确完成的重命名别名也不会破坏这一点:

export { X as Y } from '…';

import { X as Y } from '…';
export { Y }

import { X } from '…';
export { X as Y }

但在语句中的使用将被视为使用和中断(非复杂)优化:

import { X } from '…';
export const Y = X; // avoid!

所以我的问题是,是否有任何事实证明或反驳这一点?

您可以尝试一下,看看它是否有效。

于 2019-02-21T09:52:01.540 回答