重新出口模块对树木有害吗?

pbo*_*oer 10 javascript ecmascript-6 webpack es6-modules tree-shaking

我和我的同事发生争执,我们似乎无法从任何官方来源(MDN,webpack文档......)找到答案.我的研究也没有取得多少成果.即使在进口方面也似乎存在疑问.

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

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

export { default } from './reducer';
Run Code Online (Sandbox Code Playgroud)

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

然而,我的一些同事认为export * from,事实上可能会损害webpack树木震动的能力,因为他们相信在出口实际上只是再出口时会使用出口.

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

Ber*_*rgi 6

据认为export * from,通过欺骗Webpack相信实际上只是在重新导出时使用了导出,可能会损害webpack的摇树能力。

不,导入/导出声明除了设置导出变量的别名外不做任何事情,它们不算作“使用”。考虑到它们的语义,它们会被任何捆绑器专门跟踪,并且不会对树的摇动产生不利影响。

甚至没有正确完成的重命名别名也不会破坏这一点:

export { X as Y } from '…';
Run Code Online (Sandbox Code Playgroud)

import { X as Y } from '…';
export { Y }
Run Code Online (Sandbox Code Playgroud)

import { X } from '…';
export { X as Y }
Run Code Online (Sandbox Code Playgroud)

但语句中的用法将被视为用法并中断(非复杂的)优化:

import { X } from '…';
export const Y = X; // avoid!
Run Code Online (Sandbox Code Playgroud)

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

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