webpack生产环境优化:tree shaking
转载请注明 来源:http://www.eword.name/
Author:eword
Email:eword@eword.name
webpack生产环境优化:tree shaking
- tree shaking: 去除无用代码
- 前提:
- 1.必须使用ES6模块化
- 2.开启production环境
1一、核心配置
```js /* webpack.config.js webpack的配置文件 路径: ./webpack.config.js */ // 生产环境下会自动压缩js代码,和启用tree shaking mode: 'production', };
二、验证tree shaking是否生效
2.1、工程文件目录
. ├── src │ ├── css │ │ ├── iconfont.css │ │ ├── index.css │ │ └── index.less │ ├── imgs │ │ ├── img.jpg │ │ ├── img1.jpg │ │ ├── img2.jpg │ │ └── img3.jpg │ ├── index.html │ ├── js │ │ ├── iconfont.js │ │ ├── index.js // 引入test.js文件的部分函数 │ │ └── test.js // 使用ES6模块化的js 文件 │ └── media │ ├── iconfont.json │ └── iconfont.ttf └── webpack.config.js
2.1.1、test.js
//路径:./src/js/test.js export function mul(x, y) { return x * y; } export function count(x, y) { return x - y; }
2.1.2、index.js
//入口文件 //路径: ./src/js/indexjs // 引入 test.js中的 mul 函数 import { mul } from './test'; // eslint-disable-next-line console.log(mul(2, 3));
2.2、打包
> npx webpack
2.3、验证方法
打开打包生成的js文件,分别查找 乘法和减法,其中乘法可以找到而减法找不到。
三、tree shaking 副作用
某些情况下 tree shaking 可能会误删除。
例如:在packlage.json中配置了sideEffects
{ "name": "notes_demo", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "build": "node_modules/.bin/webpack --config webpack.config.js", "start": "npx webpack-dev-server --config webpack.config.js --open Chrome.exe" }, "keywords": [], "author": "eword <eword@eword.name> (http://www.eword.name/)", "license": "ISC", "devDependencies": { "@babel/core": "^7.14.6", "@babel/preset-env": "^7.14.7", "babel-loader": "^8.3.0", "core-js": "^3.32.1", "css-loader": "^3.4.2", "eslint": "^7.32.0", "eslint-config-airbnb-base": "^15.0.0", "eslint-loader": "^4.0.2", "eslint-plugin-import": "^2.28.1", "file-loader": "^5.0.2", "find-cache-dir": "^5.0.0", "html-loader": "^0.5.5", "html-webpack-plugin": "^4.5.2", "install": "^0.13.0", "less": "^3.11.1", "less-loader": "^5.0.0", "mini-css-extract-plugin": "^0.9.0", "optimize-css-assets-webpack-plugin": "^5.0.3", "postcss-loader": "^3.0.0", "postcss-preset-env": "^6.7.0", "style-loader": "^1.1.3", "uninstall": "0.0.0", "url-loader": "^3.0.0", "webpack": "^4.41.6", "webpack-cli": "^3.3.11", "webpack-dev-server": "^3.10.3" }, "browserslist": { "development": [ "last 1 chrome version", "last 1 firefox version", "last 1 safari version", "ie 9-12" ], "production": [ ">0.2%", "not dead", "not op_mini all" ] }, "eslintConfig": { "extends": "airbnb-base" }, "sideEffects": false }
核心配置
/所有代码都没有副作用(都可以进行tree shaking)
"sideEffects": false
问题:可能会把css /@babel/polyfill 等文件干掉(副作用)。
解决方式
修改
sideEffects
配置
"sideEffects": ["*.css","*.less"]
通过配置css和less文件不会被tree shaking。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异