美文网首页Web 前端开发 让前端飞
使用purifycss-webpack来实现Tree Shaki

使用purifycss-webpack来实现Tree Shaki

作者: 竿牍 | 来源:发表于2020-01-30 11:26 被阅读0次

    本文主要讲解使用purifycss-webpack来实现css的Tree Shaking,Tree Shaking意思是摇树,即为将项目中没有用到的css代码或js代码过滤掉,不将其打包到文件中,本章知识结构:

    • 项目准备
    • 使用purifycss
    • 功能测试

    项目准备

    1、使用css-loader和style-loader
    不了解的请先查看文章:https://blog.csdn.net/u010982507/article/details/81277151
    2、使用extract-text-webpack-plugin
    不了解的请先查看文章:https://blog.csdn.net/u010982507/article/details/81337529
    3、使用postcss-cssnext
    不了解的请先查看文章:https://blog.csdn.net/u010982507/article/details/81412335

    使用purifycss

    1、安装purify-css

    npm install purify-css --save-dev
    

    2、安装purifycss-webpack

    npm install purifycss-webpack --save-dev
    

    3、安装glob-all

    // glob-all用于处理多路径文件,使用purifycss的时候要用到glob.sync方法。
    npm install glob-all --save-dev
    

    4、配置webpack.config.js

    • 引入purifycss-webpack和glob-all
    var PurifyCss = require('purifycss-webpack');
    var glob = require('glob-all');
    
    • 在plugins中配置
    new PurifyCss({
        paths: glob.sync([ // 传入多文件路径
            path.resolve(__dirname, './*.html'), // 处理根目录下的html文件
            path.resolve(__dirname, './src/*.js') // 处理src目录下的js文件
        ])
    })
    
    • 整个webpack.config.js的配置
    var path = require("path");
    var PostCss_CssNext = require('postcss-cssnext');
    var ExtractTextWebpackPlugin = require('extract-text-webpack-plugin');
    var PurifyCss = require('purifycss-webpack'); // 引入PurifyCss
    var glob = require('glob-all');// 引入glob-all
    module.exports = {
        entry: {
            index: "./src/index.js"
        },
        output: {
            path: path.resolve(__dirname, "dist"),
            publicPath: "dist/",
            filename: '[name].bundle.js',
            chunkFilename: "[name].bundle.js"
        },
        module: {
            rules: [
                {
                    test: /\.css$/,
                    use: ExtractTextWebpackPlugin.extract({ // 使用ExtractTextWebpackPlugin插件提取css
                        fallback: {// 这里表示不提取的时候,使用什么样的配置来处理css
                            loader: 'style-loader',
                            options: {
                                singleton: true // 表示将页面上的所有css都放到一个style标签内
                            }
                        },
                        use: [ // 提取的时候,继续用下面的方式处理
                            {
                                loader: 'css-loader',
                                options: {
                                    minimize: true  // 开启压缩
                                }
                            },
                            {
                                loader: 'postcss-loader',
                                options: {
                                    ident: 'postcss',  // 表示下面的插件是对postcss使用的
                                    plugins: [
                                        PostCss_CssNext(), // 允许使用未来的css(包含AutoPrefixer功能)
                                    ]
                                }
                            }
                        ]
                    })
                }
            ]
        },
        plugins: [
            new ExtractTextWebpackPlugin({ // 将js中引入的css文件提取到[name].min.css文件中
                filename: '[name].min.css' // 配置提取出来的css名称
            }),
            new PurifyCss({
                paths: glob.sync([ // 传入多文件路径
                    path.resolve(__dirname, './*.html'), // 处理根目录下的html文件
                    path.resolve(__dirname, './src/*.js') // 处理src目录下的js文件
                ])
            })
        ]
    }
    

    功能测试

    测试项目,不了解的请查看https://blog.csdn.net/u010982507/article/details/81412335
    1、测试html中的tree shaking

    • 在index.html中创建几个div
    <div class="box">
    
    </div>
    <div class="big-box">
    
    </div>
    
    • 在base.css中添加样式
    .box {
        transition: transform 1s;
        width: calc(100% - 100px);
        height: calc(100% / 2.2);
        background: black;
    }
    
    .big-box {
        width: 200px;
        height: 200px;
        background: blue;
    }
    
    .middle-box {
        width: 150px;
        height: 150px;
        background: white;
    }
    
    .small-box {
        width: 100px;
        height: 100px;
        background: orange;
    }
    
    • 执行打包命令webpack
      因为在index.html中没有使用small-box和middle-box两个class,所以打包后的index.min.css中会过滤掉这两个class,不会打包进去。
      2、测试js中的tree shaking
    • 在index.js中创建新的div放到className为box的div下
    import './css/base.css'
    var box = document.getElementsByClassName('box')[0];
    var middleBox = document.createElement('div');
    middleBox.className = 'middle-box';
    box.appendChild(middleBox);
    
    • 执行打包命令webpack
      查看index.min.css文件,发现打包文件已经包含middle-box,但是small-box没有用到,所以还是没有打包进去。

    相关文章

      网友评论

        本文标题:使用purifycss-webpack来实现Tree Shaki

        本文链接:https://www.haomeiwen.com/subject/hurithtx.html