HTML CSS 和 JS 的代码压缩
1. HTML 压缩
html-webpack-plugin,这是一个非常强大的插件
安装
npm install html-webpack-plugin -D
修改 html-webpack-plugin,然后设置压缩参数
"use strict";
// 生成环境没有热更新,生产环境热更新没用
const path = require("path");
const webpack = require("webpack");
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const OptimizeCSSAssetsPlugin = require("optimize-css-assets-webpack-plugin");
const HtmlWebpackPlugin = require("html-webpack-plugin");
module.exports = {
entry: "./src/search.js",
output: {
path: path.join(__dirname, "dist"),
// 输出路径 | 加入 js 文件指纹
filename: "[name]_[chunkhash:8].js",
},
mode: "production",
module: {
rules: [
{
test: /.js$/,
use: "babel-loader",
},
{
test: /.css$/,
use: [MiniCssExtractPlugin.loader, "css-loader"],
// style-loader 的顺序必须在 css-loader 之前
},
{
test: /.less$/,
use: [MiniCssExtractPlugin.loader, "css-loader", "less-loader"],
},
{
test: /.(png|jpg|gif|jpeg)$/,
use: [
{
loader: "file-loader",
options: {
name: "[name]_[hash:8].[ext]",
},
},
],
},
{
test: /.(woff|woff2|eot|ttf|otf)$/,
use: [
{
loader: "file-loader",
options: {
name: "[name]_[hash:8].[ext]",
},
},
],
},
],
},
plugins: [
// 这个插件和 style-loader 插件互斥
// 只能选择一个
new MiniCssExtractPlugin({
filename: "[name]_[contenthash:8].css",
}),
new OptimizeCSSAssetsPlugin({
assetNameRexExp: /.css$/g,
cssProcessor: require("cssnano"),
}),
new HtmlWebpackPlugin({
// html webpack plugin 的模板,template
template: path.join(__dirname, "src/search.html"),
// 指定打包出来的 html 的文件名称
filename: "search.html",
// 指定生成的 HTML 要使用哪些 chunk
chunk: ["search"],
// 打包出来的 chunk 像 css 、js 会自动注入到 html 里面
inject: true,
// 压缩的选项
minify: {
html5: true,
collapseWhitespace: true,
preserveLineBreaks: false,
minifyCSS: true,
minifyJS: true,
removeComments: false,
},
}),
new HtmlWebpackPlugin({
// html webpack plugin 的模板,template
template: path.join(__dirname, "src/index.html"),
// 指定打包出来的 html 的文件名称
filename: "index.html",
// 指定生成的 HTML 要使用哪些 chunk
chunk: ["search"],
// 打包出来的 chunk 像 css 、js 会自动注入到 html 里面
inject: true,
// 压缩的选项
minify: {
html5: true,
collapseWhitespace: true,
preserveLineBreaks: false,
minifyCSS: true,
minifyJS: true,
removeComments: false,
},
}),
],
};
2. CSS 压缩
使用 optimize-css-assets-webpack-plugin,同时使用 cssnano
记得要安装预处理器 cssnano
npm install optimize-css-assets-webpack-plugin -D
npm install cssnano -D
module.exports = {
entry: {
app: './src/app.js',
search: './src/search/js'
},
output: {
filename: '[name][chunkhash:8].js',
path: __dirname + '/dist'
},
plugins: [
new OptimizeCSSAssetsPlugin({
assetNameRegExp: /.css$/g,
cssProcessor: require('cssnano')
})
]
};
3. JS 文件的压缩
webpack 内置了 uglifyjs-webpack-plugin 插件 ,我们默认打包出来的文件就已经压缩过了。
当然我们可以手动的安装,然后调整里面的配置,加入额外的参数,比如开启并行压缩。