webpack 使用的导出项和副作用是什么?

4jb9z9bj  于 2023-01-26  发布在  Webpack
关注(0)|答案(1)|浏览(145)

webpack配置的optimization中的usedExportspackage.json中的sideEffects之间的区别究竟是什么?

8xiog9wr

8xiog9wr1#

这是两码事。

关于usedExports

将此视为Webpack的指令,以允许它执行以下两项操作:

  • 允许将导出的标识符重命名为较短的版本(名称修改),* 默认情况下,在绑定过程中,不会重命名导出的修饰符。*
    • 默认情况下,所有导出的标识符(变量、函数、类等)都会被导出,即使它们在代码中的任何地方都没有使用。*

例如,在代码中

// MODULE A
export const myVariable = 10;

export const myFunction1 = () => a1;

export const myFunction2 = () => a2();

// MODULE B
import { myVariable } from './a.js';

// MODULE C
import { myFunction1 } from './a.js';

在上面的代码中启用此标志后,由于代码中没有使用myFunction2,当a.js模块被导出时,它不会被导出。下一件事它可能会尝试将myVariable重命名为单字母标识符,如amyFunction1重命名为b或类似的。这不仅适用于您编写的模块,也适用于node_modules中的模块。

关于sideEffects

虽然像webpack这样的模块捆绑器足够智能,能够判断给定模块中是否存在副作用,但是提供明确的sideEffects提示可以为捆绑器增加更多的信心。
进行生产捆绑时,仅当启用optimization.providedExports标志时,才使用sideEffectsusedExports

相关问题