跳到主要内容

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.jsb.js中删除

配置 Tree Shake

Tree Shake 默认在生产模式下启用,要禁用 tree Shake,请使用 compilation. treeShake

farm.config.ts

处理 Side Effects

当一个模块包含Side Effects时,Farm 不会为其应用 tree shake,其所有导入和导出都被视为已使用。Farm 会认为以下模块有 Side effects

  1. Common Js 模块总是有副作用.
  2. 一个模块包含自执行的语句在全局范围有副作用
  3. 包含循环依赖的模块有副作用
  4. 模块匹配 sideEffects 配置在其最接近的 package. json
  5. 入口模块总是有副作用

示例 1:

Common Js 模块总是有副作用.

示例 2:

a() 在全局范围内执行,我们将其视为副作用.

Example 3:

ab是循环依赖关系,所以它们也会被视为副作用.

Example 4:

package.json

所有 global/ 下的 ts 模块都被视为副作用.

Extremely Fast Web Build Tool Written in Rust

Copyright © 2024 Farm Community. Built with Docusaurus.