optimize-css-assets-webpack-plugin css代码压缩

接下来就是设置 optimization.minimizer ,这里需要注意的就是,此时设置optimization.minimizer会覆盖webpack默认提供的规则,比如JS代码就不会再去压缩了

  1. const MiniCssExtractPlugin = require('mini-css-extract-plugin');
  2. const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');
  3. const UglifyJsPlugin = require('uglifyjs-webpack-plugin');
  4. const {
  5. merge
  6. } = require('webpack-merge')
  7. const commomConfig = require('./webpack.common')
  8. const prodConfig = {
  9. mode: 'production',
  10. devtool: 'cheap-module-source-map',
  11. optimization: {
  12. minimizer: [
  13. new UglifyJsPlugin({
  14. sourceMap: true,
  15. parallel: true, // 启用多线程并行运行提高编译速度
  16. }),
  17. new OptimizeCSSAssetsPlugin({}),
  18. ]
  19. },
  20. plugins: [
  21. new MiniCssExtractPlugin({
  22. // 类似 webpackOptions.output里面的配置 可以忽略
  23. filename: '[name].[hash].css',
  24. chunkFilename: '[id].[hash].css'
  25. })
  26. ],
  27. module: {
  28. rules: [{
  29. test: /\.(sa|sc|c)ss$/,
  30. use: [{
  31. loader: MiniCssExtractPlugin.loader,
  32. options: {
  33. // 这里可以指定一个 publicPath
  34. // 默认使用 webpackOptions.output中的publicPathcss
  35. // 举个例子,后台支持把css代码块放入cdn
  36. publicPath: "https://cdn.example.com/css/"
  37. },
  38. },
  39. 'css-loader',
  40. 'postcss-loader',
  41. 'sass-loader',
  42. ],
  43. }]
  44. },
  45. }
  46. module.exports = merge(commomConfig, prodConfig)

uglifyjs-webpack-plugin代码压缩

这个插件解决的问题,就是当你需要去optimization.minimizer中设置,这样子会覆盖webpack基本配置,原本JS代码压缩的功能就会被覆盖

  1. const MiniCssExtractPlugin = require('mini-css-extract-plugin');
  2. const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');
  3. const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
  4. const {
  5. merge
  6. } = require('webpack-merge')
  7. const commonConfig = require('./webpack.common')
  8. const prodConfig = {
  9. mode: 'production',
  10. devtool: 'cheap-module-source-map',
  11. optimization: {
  12. minimizer: [
  13. new UglifyJsPlugin({
  14. sourceMap: true,
  15. parallel: true, // 启用多线程并行运行提高编译速度
  16. }),
  17. new OptimizeCSSAssetsPlugin({}),
  18. ]
  19. },
  20. plugins: [
  21. new MiniCssExtractPlugin({
  22. // 类似 webpackOptions.output里面的配置 可以忽略
  23. filename: '[name].[hash].css',
  24. chunkFilename: '[id].[hash].css'
  25. })
  26. ],
  27. module: {
  28. rules: [{
  29. test: /\.(sa|sc|c)ss$/,
  30. use: [{
  31. loader: MiniCssExtractPlugin.loader,
  32. options: {
  33. // 这里可以指定一个 publicPath
  34. // 默认使用 webpackOptions.output中的publicPathcss
  35. // 举个例子,后台支持把css代码块放入cdn
  36. publicPath: "https://cdn.example.com/css/"
  37. },
  38. },
  39. 'css-loader',
  40. 'postcss-loader',
  41. 'sass-loader',
  42. ],
  43. }]
  44. },
  45. }
  46. module.exports = merge(commonConfig, prodConfig)