一:基本概念
1、字面意思是摇树,一句话:项目中没有使用的代码会在打包时候丢掉。分为css的tree shaking和js的tree shaking。
2、使用场景:1)常规优化。2)使用第三方库,但是只使用了部分功能。
二:JS tree shaking
在webpack4中已经移除了UglifyJsPlugin,只需要配置mode
为"production"
,即可显式激活 UglifyjsWebpackPlugin
插件。
下面说的是webpack3.10.0的实现方法:
(1)常规业务的tree shaking
1、webpack.config.js配置
const path = require(‘path‘); var webpack = require(‘webpack‘); module.exports = { entry:{ app:‘./src/app.js‘ }, output:{ path:path.resolve(__dirname,‘dist‘), publicPath:‘./dist/‘,//设置引入路径在相对路径 filename:‘[name].bundle.js‘, }, plugins:[ new webpack.optimize.UglifyJsPlugin({ test: /\.js($|\?)/i }) ] }
2、其他js文件配置
//a.js import {a} from ‘./common‘; a(); //common.js var a = function(){ console.log(‘a‘) } var b = function(){ console.log(‘b‘) } var c = function(){ console.log(‘c‘) } export {a,b,c}
打包成功后,会发现打包文件只有a函数,删除掉了b和c函数。这就代表JS的tree shaking成功了。
(2)第三方库的tree shaking
不使用lodash插件,安装库对应的模块系统即可。
$ npm i lodash-es --save-dev // app.js import { chunk } from "lodash-es"; console.log(chunk([1, 2, 3], 2));
备注:如果lodash不支持tree shaking,这个比较特殊。面对这种特殊情况,可以安装babel插件转化lodash。
三:css的tree shaking
以去除项目代码中用不到的 CSS 样式,仅保留被使用的样式代码。
// webpack.config.js const path = require("path"); const PurifyCSS = require("purifycss-webpack"); const glob = require("glob-all");//glob-all
的作用就是帮助PurifyCSS
进行路径处理,定位要做 Tree Shaking 的路径文件。 let purifyCSS = new PurifyCSS({ paths: glob.sync([ // 要做CSS Tree Shaking的路径文件 path.resolve(__dirname, "./*.html"), // 请注意,我们同样需要对 html 文件进行 tree shaking path.resolve(__dirname, "./src/*.js") ]) });
原文地址:https://www.cnblogs.com/weihuan/p/9642784.html
时间: 2024-10-08 22:07:06