惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

IT之家
IT之家
博客园_首页
S
SegmentFault 最新的问题
罗磊的独立博客
博客园 - 【当耐特】
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
阮一峰的网络日志
阮一峰的网络日志
D
Docker
雷峰网
雷峰网
Google DeepMind News
Google DeepMind News
博客园 - 司徒正美
V
V2EX
大猫的无限游戏
大猫的无限游戏
V
Visual Studio Blog
腾讯CDC
宝玉的分享
宝玉的分享
酷 壳 – CoolShell
酷 壳 – CoolShell
人人都是产品经理
人人都是产品经理
T
Tailwind CSS Blog
Vercel News
Vercel News
H
Help Net Security
博客园 - Franky
D
DataBreaches.Net
aimingoo的专栏
aimingoo的专栏

6Jyc5p+a

【笔记】HermesAgent学习笔记 【笔记】DeepSeekHarness学习笔记 【笔记】Rollup的PluginBabel插件 【笔记】Rollup学习笔记 【笔记】Gulp的BrowserSync插件 【笔记】Node-SSH学习笔记 【笔记】Tapable学习笔记 【笔记】Highlight.js学习笔记 【笔记】Marked学习笔记 【笔记】Webpack通过schema-utils实现Loader参数校验 【笔记】Webpack的WebpackBundleAnalyzer插件 【代码】校验信用卡号码 【笔记】Webpack的SpeedMesureWebpackPlugin插件 【笔记】Codex配置Brave浏览器的MCP 【笔记】Webpack的CSSMinimizerWebpackPlugin插件 【笔记】FastNodeManager学习笔记 【笔记】Terser学习笔记 【笔记】Codex配置Wireshark的MCP 【笔记】Codex配置Unity的MCP 【笔记】Codex配置Blender的MCP 【笔记】Codex配置IDEA的MCP 【笔记】Browserslist学习笔记 【笔记】Codex学习笔记 【笔记】MicrosoftStore微软商店学习笔记 【笔记】通过NapCat和AstrBot实现QQ机器人 【笔记】部署NapCat 【笔记】部署AstrBot 【笔记】Poetry学习笔记 【笔记】uv学习笔记 【笔记】Nodejs通过mysql2操作MySQL数据库
【笔记】Webpack实现TreeShaking
57uv6Z6g · 2026-08-06 · via 6Jyc5p+a

前言

Webpack实现TreeShaking

通过TerserWebpackPlugin对JS函数进行TreeShaking

下载依赖

1
npm install -D terser-webpack-plugin

修改配置文件

optimization.usedExports:对从未使用的函数通过魔法函数unused harmony export null进行标记,Terser会自动忽略具有标记的函数的打包

webpack.config.js
1
2
3
4
5
6
7
8
9
10
11
const TerserPlugin = require("terser-webpack-plugin");

module.exports = {
optimization: {
usedExports: true
},
minimize: true,
minimizer: [
new TerserPlugin()
]
};

通过PurgeCSSWebpackPlugin对CSS类进行TreeShaking

下载依赖

1
npm install -D purgecss-webpack-plugin glob

修改配置文件

webpack.config.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
const TerserPlugin = require("purgecss-webpack-plugin");
const glob = require("glob");

module.exports = {
plugins: [
new PurgecssPlugin({
paths: glob.sync(`${path.resolve(__dirname, "../src")}/**/*`, { nodir: true }),
safelist: function () {
return {
standard: ["body"]
}
}
})
]
};
  • 默认所有import ""导入但是没有使用的模块都会被TreeShaking

  • JS文件如果所有导出的模块都是纯函数,则无需配置或指定为false

sideEffects:指定需要Webpack忽略TreeShaking的文件,缺省值为false,表示没有需要忽略TreeShaking的文件

package.json
1
2
3
{
"sideEffects": false
}
  • JS文件如果导出的模块有非纯函数,具有副作用,则需要忽略这个JS文件的TreeShaking
package.json
1
2
3
4
5
{
"sideEffects": [
"./src/<file>.js"
]
}
  • 忽略所有CSS文件的TreeShaking
    • 因为所有CSS文件的导入一定没有使用,都是import "",所以需要忽略所有CSS文件的TreeShaking
package.json
1
2
3
4
5
{
"sideEffects": [
"*.css"
]
}

完成