webpack优化篇(四十八):使用 Tree Shaking 擦除无用的 JavaScript 和 CSS

简介: webpack优化篇(四十八):使用 Tree Shaking 擦除无用的 JavaScript 和 CSS

说明

玩转 webpack 学习笔记



tree shaking(摇树优化)


概念:1 个模块可能有多个方法,只要其中的某个方法使用到了,则整个文件都会被打到 bundle 里面去,tree shaking 就是只把用到的方法打入 bundle ,没用到的方法会在 uglify 阶段被擦除掉。


使用:webpack 默认支持,在 .babelrc 里设置 modules: false 即可

   production mode的情况下默认开启


要求:必须是 ES6 的语法,CJS 的方式不支持

这里 js 方面的不多说,具体可以参考我这篇:webpack进阶篇(二十一):Tree Shaking的使用和原理分析


无用的 CSS 如何删除掉?


PurifyCSS: 遍历代码,识别已经用到的 CSS class

uncss: HTML 需要通过 jsdom 加载,所有的样式通过 PostCSS 解析,通过 document.querySelector 来识别在 html 文件里面不存在的选择器


在 webpack 中如何使用 PurifyCSS?

使用 purgecss-webpack-plugin:https://github.com/FullHuman/purgecss-webpack-plugin 和 mini-css-extract-plugin 配合使用

const path = require('path')
const glob = require('glob')
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
const PurgecssPlugin = require('purgecss-webpack-plugin')
const PATHS = {
    src: path.join(__dirname, 'src')
}
module.exports = {
    module: {
        rules: [
            {
                test: /\.css$/,
                use: [
                    MiniCssExtractPlugin.loader,
                    "css-loader"
                ]
            }
        ]
    },
    plugins: [
        new MiniCssExtractPlugin({
            filename: "[name].css",
        }),
        // 路径需要的是绝对路径,多页面需要传递数组,通过 glob 找到符合路径下面的所有的都匹配出来
        new PurgecssPlugin({
            paths: glob.sync(`${PATHS.src}/**/*`, { nodir: true }),
        }),
    ]
}



实战


没有优化掉无用的 css

我们在 search 的css 里添加一个没用使用的类


61698e460f1044ba9ab9e6119846c729.png


然后我们打包,去 dist 目录里找到 search 的 css 文件,可以看到这个类也打包进去了,我格式化了一下 css 文件


99588bb3f93643f58f1d6f17e42bad3c.png


使用 purgecss-webpack-plugin 优化掉无用的 css

先安装依赖

npm i purgecss-webpack-plugin -D


4da2268c72214bf381b7563d7d1a9771.png

添加配置

729617fb4332427fa914538e3191ce12.png

36e7e145f86645e097248355bd59162f.png

添加好之后,运行打包命令,我们可以看到没有使用的类就被清除掉了。


1416a257dad8479b8d16941619665041.png


目录
相关文章
|
1月前
|
JavaScript 前端开发 开发者
编程笔记 html5&css&js 071 JavaScript Symbol 数据类型
编程笔记 html5&css&js 071 JavaScript Symbol 数据类型
|
1天前
|
缓存 JavaScript 前端开发
js开发:请解释什么是Webpack,以及它在项目中的作用。
Webpack是开源的JavaScript模块打包器,用于前端项目构建,整合并优化JavaScript、CSS、图片等资源。它实现模块打包、代码分割以提升加载速度,同时进行资源优化和缓存。Webpack的插件机制可扩展功能,支持热更新以加速开发流程。
11 2
|
8天前
|
JavaScript 前端开发 iOS开发
js实用方法记录-动态加载css/js
js实用方法记录-动态加载css/js
16 0
|
16天前
|
JSON JavaScript 前端开发
js是什么、html、css
js是什么、html、css
|
22天前
|
人工智能 前端开发 JavaScript
【前端设计】HTML+CSS+JavaScript基本特性
【前端设计】HTML+CSS+JavaScript基本特性
JS+CSS随机点名详细介绍复制可用(可自己添加人名)
JS+CSS随机点名详细介绍复制可用(可自己添加人名)
|
1月前
|
前端开发 JavaScript
从0到1:用HTML、CSS和JavaScript构建一个简单的待办事项列表
从0到1:用HTML、CSS和JavaScript构建一个简单的待办事项列表
26 0
|
1月前
|
前端开发 JavaScript UED
前端开发的魔法:CSS动画与JavaScript的完美结合
本文将探讨如何利用CSS动画和JavaScript的结合,为前端页面增添生动的效果。我们将通过实例展示如何使用这两种技术为网页元素创建吸引人的动画效果,并讨论它们的优缺点和适用场景。
29 0
|
1月前
|
缓存 自然语言处理 前端开发
JS/CSS体积减少了67%,我们是如何做到的?
JS/CSS体积减少了67%,我们是如何做到的?
18 1
|
1月前
|
JavaScript 前端开发
编程笔记 html5&css&js 079 JavaScript 循环语句
编程笔记 html5&css&js 079 JavaScript 循环语句