Tree Shake
Farm 支持 Tree Shake,该功能在默认的生产环境中自动启用,可以通过compilation.treeShaking选项打开或关闭。
在 Tree Shake 期间,package.json 中的 sideEffects 字段将被自动读取,具有 sideEffects 的模块将不会执行 Tree Shake。
备注
Farm 会将所有循环依赖的模块视为 sideEffects,不会执行 Tree Shake。请尽量避免项目中的循环依赖。
Tree shake 示例:
a.js
b.js
a.js
是 entry,它导入b.js
,tree shaking 后,结果是:
a.js
b.js
b2
未使用,将在a.js
和 b.js
中删除
配置 Tree Shake
Tree Shake 默认在生产模式下启用,要禁用 tree Shake,请使用 compilation. treeShake
:
farm.config.ts
处理 Side Effects
当一个模块包含Side Effects
时,Farm 不会为其应用 tree shake,其所有导入和导出都被视为已使用。Farm 会认为以下模块有 Side effects
:
- Common Js 模块总是有副作用.
- 一个模块包含
自执行
的语句在全局范围有副作用 - 包含循环依赖的模块有副作用
- 模块匹配
sideEffects
配置在其最接近的package. json
- 入口模块总是有副作用
示例 1:
Common Js 模块总是有副作用.
示例 2:
a()
在全局范围内执行,我们将其视为副作用.
Example 3:
a
,b
是循环依赖关系,所以它们也会被视为副作用.
Example 4:
package.json
所有 global/
下的 ts 模块都被视为副作用.