webpack 代码压缩

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 插件 ,我们默认打包出来的文件就已经压缩过了。

当然我们可以手动的安装,然后调整里面的配置,加入额外的参数,比如开启并行压缩。

原文地址:https://www.cnblogs.com/ssaylo/p/13646823.html