重新导出模块是否对摇树有害?

时间:2019-02-20 18:55:25

标签: javascript webpack ecmascript-6 es6-modules tree-shaking

我和我的同事争论不休,我们似乎无法从任何官方来源(MDN,Webpack文档等)找到答案。我的研究也hasn't yielded mucheven when it comes to importing似乎也有疑问。

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

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

export { default } from './reducer';

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

但是,我的一些同事认为export * from实际上可能通过诱骗webpack的摇树能力来欺骗actions$实际上只是被重新出口。

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

1 个答案:

答案 0 :(得分:2)

  

我们相信export * from可能会欺骗Webpack,因为它欺骗了人们以为实际上只是在重新导出时使用了导出。

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

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

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!
  

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

您可以尝试一下并查看其工作原理。