webpack5-打包css等样式资源,css等样式文件提取,css等样式文件压缩

打包css资源

加载css资源需要安装style-loader,css-loader库

配置如下:

   module: {
        rules: [
            // 在rules中写详细的loader配置
            // 打包css资源
            {
                // 正则表达式,匹配那些文件,匹配以.css结尾的文件
                test: /\.css$/,
                // 使用哪些loader进行处理
                use: [
                    // 创建style标签,将js的样式资源插入进去,添加到head中生效
                    'style-loader',
                    // 将css文件变成commonjs模块加载到js中,里面内容是样式字符串。
                    'css-loader'
                ]
            }
        ]
    },

注意:

 use数组中loader执行顺序:从右到左,从下到上,依次执行。

示例:

//index.html
<body>
    <div>webpack5学习</div>
    <!-- 注释 -->
    <div>html压缩</div>
    <div class="box1"></div>
</body>

//index.js中引入css文件
import './css/style1.css'
function add(a, b) {
    return a + b;
}

console.log(add(1, 3))

//css文件
.box1 {
    width: 100px;
    height: 100px;
    background-color: aqua;
    margin: 10px;
}

执行webpack命令

可以看到编译了css文件

webpack5-打包css等样式资源,css等样式文件提取,css等样式文件压缩 输出文件中也嵌入了css文件

webpack5-打包css等样式资源,css等样式文件提取,css等样式文件压缩

 在浏览器中运行打包输出的index.html文件,可以看到样式已经嵌入到style标签中了

webpack5-打包css等样式资源,css等样式文件提取,css等样式文件压缩

打包less资源

安装 less-loader,less库

配置如下:

            // 不同的文件必须配置不同的loader处理,所以less和css文件的处理不能放在一起
            //加载less文件
            {
                test: /\.less$/,
                use: [
                    'style-loader',
                    'css-loader',
                    // 将less文件编译成css文件
                    // 需要下载less-loader和less库
                    'less-loader'
                ]
            }

 示例:

//html文件
<body>
    <div>webpack5学习</div>
    <!-- 注释 -->
    <div>html压缩</div>
    <div class="box1"></div>
    <div class="box2"></div>
</body>

//js文件
import './css/style1.css'
import './css/style2.less'
function add(a, b) {
    return a + b;
}

console.log(add(1, 3))

//less文件
.box2{
    width: 100px;
    height: 100px;
    background-color: red;
    margin: 10px;
}

执行webpack命令

webpack5-打包css等样式资源,css等样式文件提取,css等样式文件压缩

 可以看到打包了less文件

输出文件中也嵌入了less文件

webpack5-打包css等样式资源,css等样式文件提取,css等样式文件压缩

在浏览器中运行,可以看到效果

webpack5-打包css等样式资源,css等样式文件提取,css等样式文件压缩 样式文件提取

从上面的例子中可以看到打包之后,css和less文件都嵌入在js中,这样js文件会很大,导致加载速度变慢,我们可以提取样式文件使样式文件在单独的文件夹中。

分析:

因为webpack打包时,css-loader会将css文件嵌入到js中,然后再经过style-loader创建style标签,将样式插入,所以打包之后的css样式是在js文件,js太大影响加载速度和性能。

在提取时需要mini-css-extract-plugin插件,并且不能使用style-loader。需要使用mini-css-extract-plugin自己的loader替代style-loader

安装mini-css-extract-plugin

css文件的提取

配置

//plugins中的配置
    // 插件
    plugins: [
        // 详细的plugins配置
        // 创建HtmlWebpackPlugin对象
        new HtmlWebpackPlugin({
            // 以./src/index.html为模板,并自动引入打包输出的所有资源(js或者css)
            template: './src/index.html',
            minify: {
                // // 移除空格
                // collapseWhitespace: true,
                // // 移除注释
                // removeComments: true
            }
        }),
        new MiniCssExtractPlugin({
            // 对css文件重命名
            filename: 'css/built.css'
        }),
    ],

//module中rules的配置
            {
                // 正则表达式,匹配那些文件,匹配以.css结尾的文件
                test: /\.css$/,
                // 使用哪些loader进行处理
                use: [
                    // 创建style标签,将js的样式资源插入进去,添加到head中生效
                    // 'style-loader',
                    // 将css文件提出来不能使用style-loader,需要使用mini-css-extract-plugin自己的loader
                    // 作用将js中的css提取成单独文件
                    MiniCssExtractPlugin.loader,
                    // 将css文件变成commonjs模块加载到js中,里面内容是样式字符串。
                    'css-loader'
                ]
            },

执行webpack命令

可以看到输出文件中生成了css文件夹,并且在输出的index.html文件中引入了css文件

webpack5-打包css等样式资源,css等样式文件提取,css等样式文件压缩

less文件的提取

            //加载less文件
            {
                test: /\.less$/,
                use: [
                    // 'style-loader',
                    MiniCssExtractPlugin.loader,
                    'css-loader',
                    // 将less文件编译成css文件
                    // 需要下载less-loader和less库
                    'less-loader'
                ]
            }

 运行webpack命令之后,可以发现less文件也被打包到built.css文件中了

webpack5-打包css等样式资源,css等样式文件提取,css等样式文件压缩

压缩文件 

安装optimize-css-assets-webpack-plugin插件

引入optimize-css-assets-webpack-plugin插件

// 压缩css文件的插件
const OptimizeCssAssetsWebpackPlugin =require('optimize-css-assets-webpack-plugin')

创建optimize-css-assets-webpack-plugin对象

        // 压缩css文件
        new OptimizeCssAssetsWebpackPlugin()

执行webpack命令,可以看到输出的css文件被压缩了 

webpack5-打包css等样式资源,css等样式文件提取,css等样式文件压缩

上一篇:为什么 SpringBoot 的 jar 可以直接运行?


下一篇:在vue中优雅的使用.svg