(1): css文件合并(mini-css-extract-plugin)
 yarn add -D mini-css-extract-plugin
 
const MiniCssExtractPlugin = require("mini-css-extract-plugin"); // 合并css
  // 装载器配置
  module:{
    rules: [
      {
        test: /\.css$/,
        use: [MiniCssExtractPlugin.loader,'css-loader'] // css顺序是从右到左,从下到上
      },
      {
        test: /\.less$/,
        use: [MiniCssExtractPlugin.loader,'css-loader','less-loader'] // less顺序是从右到左,从下到上
      },
      {
        test: /\.scss$/,
        use: [MiniCssExtractPlugin.loader,'css-loader','sass-loader'] // sass顺序是从右到左,从下到上
      },
    ]
  },
  
    // mini-css-extract-plugin
	plugins: [
          new MiniCssExtractPlugin({ // 抽取css放在公共文件夹
		      filename: 'index.css' // 合并css的公共文件
		    })
   ]
npx webpack打包,可以看到我们所有的css文件都被统一到index.css文件夹下了

在这里插入图片描述

(2): css文件压缩

1: (optimize-css-assets-webpack-plugin)

 yarn add -D  optimize-css-assets-webpack-plugin
 const OptimizeCssAssetsWebpackPlugin = require("optimize-css-assets-webpack-plugin") // 压缩css
   // 压缩css
  optimization: {
    minimizer: [new OptimizeCssAssetsWebpackPlugin]
  },
npx webpack打包,可以看到index.css文件都被压缩为一行

在这里插入图片描述
2: (css-minimizer-webpack-plugin)推荐使用

 yarn add -D css-minimizer-webpack-plugin
 const CssMinimizerWebpackPlugin = require("css-minimizer-webpack-plugin") // 最新压缩css
 plugins: [
      // css-minimizer-webpack-plugin
    new CssMinimizerWebpackPlugin() // 压缩css
 ]
npx webpack打包,可以看到index.css文件都被压缩为一行在这里插入图片描述
(3): css添加前缀,兼容浏览器
 yarn add postcss postcss-loader postcss-preset-env
 yarn add autoprefixer
 
  • webpack.config.js配置如下
 const commonCssConfig = [ // 公共的css配置
  MiniCssExtractPlugin.loader,
  "css-loader",
  {
    loader: "postcss-loader",
    options: {
      //css兼容性配置
      postcssOptions: {
        plugins: [[require("postcss-preset-env")()]],
      },
    },
  },
];
  // 装载器配置
  module: {
    rules: [
      {
        test: /\.css$/,
        use: [...commonCssConfig], // css顺序是从右到左,从下到上
      },
      {
        test: /\.less$/,
        use: [...commonCssConfig,'less-loader'], // less顺序是从右到左,从下到上
      },
      {
        test: /\.scss$/,
        use: [...commonCssConfig,"sass-loader"], // sass顺序是从右到左,从下到上
      },
    ],
  },
  • 新建postcss.config.js
 module.exports={
	plugins:[require('autoprefixer')]
}
  • package.json里边的配置如下
   "browserslist": [
    "Firefox > 20",
    "iOS >= 7",
    "ie >= 8",
    "last 5 versions",
    "> 5%"
  ]
npx webpack 打包,可以看到css添加上了前缀了,是不是so easy在这里插入图片描述
完整的代码如下
 // webpack是基于node,所以使用module.exports
const path = require("path");

let HtmlWebpackPlugin = require("html-webpack-plugin"); // 生成html模板

const { CleanWebpackPlugin } = require("clean-webpack-plugin"); // 每次打包前,清除dist

const MiniCssExtractPlugin = require("mini-css-extract-plugin"); // 合并css

// const OptimizeCssAssetsWebpackPlugin = require("optimize-css-assets-webpack-plugin") // 压缩css

const CssMinimizerWebpackPlugin = require("css-minimizer-webpack-plugin"); // 最新压缩css

const TerserWebpackPlugin = require("terser-webpack-plugin"); // 压缩js 代替uglify 因为uglifyjs不支持es6语法,所以用terser-webpack-plugin替代uglifyjs-webpack-plugin

const commonCssConfig = [ // 公共的css配置
  MiniCssExtractPlugin.loader,
  "css-loader",
  {
    loader: "postcss-loader",
    options: {
      //css兼容性配置
      postcssOptions: {
        plugins: [[require("postcss-preset-env")()]],
      },
    },
  },
];

module.exports = {
  // 老版压缩css
  // optimization: {
  //   minimizer: [new OptimizeCssAssetsWebpackPlugin]
  // },
  // 入口配置
  entry: "./src/index.js",
  // 模式配置
  mode: "production", // 指定模式,默认是生产模式,开发模式便于查看代码
  // 出口配置
  output: {
    path: path.resolve(__dirname, "dist"), // __dirname 代表的是根目录  M:\47-webpack-study\01-webpack\dist
    filename: "index.js", // 指定输出的文件名
  },
  // webpack-dev-server配置
  devServer: {
    host: "localhost", // 主机
    port: "9527", // 端口
    open: true, // 自动打开
    historyApiFallback: true, //找不到页面默认跳index.html
    compress: true, //一切服务都启用gzip 压缩
    hot: true, //启动热更新
    proxy: {
      // 代理配置
      "/api": {
        target: "http:localhost:5000",
        changeOrigin: true,
      },
    },
  },
  // 装载器配置
  module: {
    rules: [
      {
        test: /\.css$/,
        use: [...commonCssConfig], // css顺序是从右到左,从下到上
      },
      {
        test: /\.less$/,
        use: [...commonCssConfig,'less-loader'], // less顺序是从右到左,从下到上
      },
      {
        test: /\.scss$/,
        use: [...commonCssConfig,"sass-loader"], // sass顺序是从右到左,从下到上
      },
    ],
  },
  // 插件配置
  plugins: [
    // html-webpack-plugin
    new HtmlWebpackPlugin({
      template: "./src/index.html", // 指定模板
      filename: "index.html", // 指定输出的文件名
    }),
    // new HtmlWebpackPlugin({ // 多模板
    //   template: './src/index.html', // 指定模板
    //   filename: 'main.html', // 指定输出的文件名
    // }),
    // clean-webpack-plugin
    new CleanWebpackPlugin(), // 使用这个插件在每次生成dist目录前,先删除dist目录

    // mini-css-extract-plugin
    new MiniCssExtractPlugin({
      // 抽取css放在公共文件夹
      filename: "index.css", // 合并css的公共文件
    }),
    // css-minimizer-webpack-plugin
    new CssMinimizerWebpackPlugin(), // 新版压缩css

    // terser-webpack-plugin
    new TerserWebpackPlugin({
      // 压缩js
      test: /\.js(\?.*)?$/i, //匹配参与压缩的文件
      parallel: true, //使用多进程并发运行
      terserOptions: {
        //Terser 压缩配置
        output: { comments: false },
        compress: {
          pure_funcs: ["console.log"], // 去除console.log
        },
      },
      extractComments: true, //将注释剥离到单独的文件中
    }),
  ],
};

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐