文件压缩分为三类文件的压缩:JS、CSS、Html。
一、JS文件的压缩
js文件的压缩是由webpack4内置的uglifyjs-webpack-plugin进行压缩的,是默认自动压缩的。
二、CSS文件的压缩
css文件的压缩是使用optimize-css-assets-webpack-plugin,搭配cssnano进行压缩的.
但是我自己在测试时,发现该插件使用cssProcessor属性会报错,所以放弃使用该插件,转而使用css-minimizer-webpack-plugin,这个插件也是使用cssnano进行压缩和优化css的,这个插件支持缓存和并发模式下运行。
基础代码:
const path = require('path');
const HtmlWebpacPlugin = require('html-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const CssMinimizerPlugin = require('css-minimizer-webpack-plugin');
module.exports = {
mode: 'development',
entry: './src/index.js',
output: {
path: path.join(__dirname, 'dist'),
filename: '[name]_[chunkhash:8].js'
},
optimization: {
minimize: true,
minimizer: [`...`, new CssMinimizerPlugin()]
},
module: {
rules: [
{ test: /\.css/, use: [MiniCssExtractPlugin.loader, 'css-loader'] },
{ test: /\.js$/, use: 'babel-loader' },
{
test: /\.(jpg|png|jpeg|gif)$/,
use: {
loader: 'file-loader',
options: { name: '[name]_[hash].[ext]', outputPath: 'imgs/' }
}
}
]
},
plugins: [
new HtmlWebpacPlugin({ template: './src/index.html' }),
new MiniCssExtractPlugin({ filename: '[name]_[contenthash:8].css' })
]
};
css-minimizer-webpack-plugin组件在webpack5中的使用是放在optimization的minimizer中的,minimizer属性是一个数组,我们将new CssMinimizerPlugin()放在minimizer数组中就可。
注意:
- 使用optimization之后,webpack中默认开启的内置优化功能会关闭,如果想要都开启,可以 minimizer: [`...`, new CssMinimizerPlugin()],`...`就是将内置的优化功能扩展到minimizer中。
- 在开发环境中,默认是不开启css优化的,如果想要在开发环境开启css优化,值optimization中设置minimize为true。
具体其他的配置向看webpack.docschina.org/plugins/css…
三、HTML文件的压缩
html文件的压缩是使用的html-webpack-plugin,这个插件是很强大的。
1、生成html文件
默认情况下,打包之后的文件夹中并没有html文件,那么打包之后的js文件就没有地方挂载,没有办法显示,使用html-webpack-plugin能够在打包后的文件夹中生成一个html文件,并将打包后的js文件挂载到这个html文件中。
2、指定chunks
在多入口的项目中,使用chunks指定可以访问的公共资源,在多入口页面时配置。
3、指定minify,进行优化
开启了minify后,打包的文件就会使用html-minifier-terser进行优化,注意,这里优化知识针对于html文件的优化,css、js文件都是不进行优化的。
常用的属性:
- removeComments:清除html文件中的注释。
- collapseWhitesapce:清除html中的前后空格,中间的空格不清理。
- minifyCss:对html中的css样式进行优化,包括style标签中的样式和行内样式,它会对样式中的空格、换行,以及最后一个分号进行优化。
- removeEmptyEmlements:清空html中的空标签,谨慎使用,因为有些空标签起占位作用,不能被删除。