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

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

  • 相关阅读:
    WCF HelpPage 和自动根据头返回JSON XML
    Jquery及插件 应用
    Autofac Mvc Webapi注入笔记
    TransactionScope 出错 与基础事务管理器的通信失败
    工厂方法模式(Factory Method)与抽象工厂模式(Abstract Factory)
    Asp.net的异步处理模型Asp.net的异步如何提高服务器的吞吐量
    WCF 契约定义命名空间 的疑问
    常用的18个人情世故
    StatusCode
    web标准常见问题集合
  • 原文地址:https://www.cnblogs.com/ssaylo/p/13646823.html
Copyright © 2020-2023  润新知