藉助於 es6 (es2015) 模塊系統 (import 和 export) 的靜態解析,webpack 可以利用 Tree Shaking 進行按需加載,移除掉沒有被引用的模塊,從而減小包的大小,縮小應用的加載時間,從而提升性能體驗。javascript
UglifyJSPlugin
來實現 tree shakingUglifyJSPlugin
的做用在於刪除未被引用代碼以及壓縮代碼。java
從 webpack 4 開始,只需將 "mode"
設置爲 "production"
模式,便可開啓 UglifyJSPlugin
的功能。webpack
詳情可參考官方 Tree Shaking 文檔:www.webpackjs.com/guides/tree…git
// `--` 表明目錄, `-` 表明文件
--demo10
--src
-app.js
-module.js
-webpack.config.js
複製代碼
module.jses6
export const sayHello1 = () => {
console.log('hello1');
}
export const sayHello2 = () => {
console.log('hello2');
}
export const sayHello3 = () => {
console.log('hello3');
}
複製代碼
app.jsgithub
// 只導入了 sayHello1 ,觀察打包後的 bundle 代碼,移除了 sayHello2 和 sayHello3 的代碼
import { sayHello1 } from './module';
sayHello1();
複製代碼
webpack.config.jsweb
const path = require("path");
module.exports = {
mode: "production" || "development", // tree shaking 須要使用 "production" 模式
entry: {
app: "./src/app.js"
},
output: {
publicPath: __dirname + "/dist/", // 打包後資源文件的引用會基於此路徑
path: path.resolve(__dirname, "dist"), // 打包後的輸出目錄
filename: "[name].bundle.js"
}
};
複製代碼
(默認你已經安裝了全局 webpack 以及 webpack-cli )app
webpack
複製代碼
打包成功後,會在 demo08 目錄下生成 dist/app.bundle.jside
打開 app.bundle.js 文件,性能
發現查找不到 Hi I want to say hello2
和 Hi I want to say hello3
,
說明 Tree Shaking 生效了。
demo 代碼地址: github.com/SimpleCodeC…
倉庫代碼地址(及目錄): github.com/SimpleCodeC…
參考文檔:tree shaking