Tree Shaking
Tree Shaking 是一种消除未使用代码的优化技术。robuild 默认启用 Tree Shaking。
默认行为
Tree Shaking 默认启用,会自动移除未使用的导出。
CLI 用法
sh
# 启用(默认)
robuild --treeshake ./src/index.ts
# 禁用
robuild --no-treeshake ./src/index.ts1
2
3
4
5
2
3
4
5
配置文件用法
build.config.ts
ts
import { defineConfig } from 'robuild'
export default defineConfig({
entries: [
{
type: 'bundle',
input: './src/index.ts',
treeshake: true, // 默认值
},
],
})1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
副作用处理
某些代码可能有副作用(如修改全局变量),需要保留。您可以在 package.json 中声明:
package.json
json
{
"sideEffects": false
}1
2
3
2
3
或指定有副作用的文件:
package.json
json
{
"sideEffects": [
"*.css",
"./src/polyfills.ts"
]
}1
2
3
4
5
6
2
3
4
5
6
高级配置
传入对象进行更精细的控制:
build.config.ts
ts
import { defineConfig } from 'robuild'
export default defineConfig({
entries: [
{
type: 'bundle',
input: './src/index.ts',
treeshake: {
moduleSideEffects: false,
},
},
],
})1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
WARNING
Tree Shaking 基于 ES 模块的静态结构分析。使用动态导入或 CommonJS 的 require() 可能会影响效果。
仅 DCE 模式
如果只想进行死代码消除(DCE)而不进行完整的 Tree Shaking:
build.config.ts
ts
import { defineConfig } from 'robuild'
export default defineConfig({
entries: [
{
type: 'bundle',
input: './src/index.ts',
minify: 'dce-only',
},
],
})1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
