体积优化第一步是压缩代码,通过 webpack 插件,将 JS、CSS 等文件进行压缩。

将 HTML CSS JS 代码压缩成 一行

1.1 JS压缩

使用 TerserWebpackPlugin 来压缩 JavaScript。

webpack5 自带最新的 terser-webpack-plugin,无需手动安装。

terser-webpack-plugin 默认开启了 parallel: true 配置,并发运行的默认数量: os.cpus().length - 1 ,本文配置的 parallel 数量为 4,使用多进程并发运行压缩以提高构建速度。

webpack.prod.js 配置方式如下:

  1. const TerserPlugin = require('terser-webpack-plugin');
  2. module.exports = {
  3. // optimizations 配置项目优化的配置项
  4. optimization: {
  5. // 用到直接复制就行
  6. minimizer: [
  7. new TerserPlugin({
  8. parallel: 4,
  9. terserOptions: {
  10. parse: {
  11. ecma: 8,
  12. },
  13. compress: {
  14. ecma: 5,
  15. warnings: false,
  16. comparisons: false,
  17. inline: 2,
  18. },
  19. mangle: {
  20. safari10: true,
  21. },
  22. output: {
  23. ecma: 5,
  24. comments: false,
  25. ascii_only: true,
  26. },
  27. },
  28. }),
  29. ]
  30. }
  31. }

体积减小 10%,效果如下:

image.png

1.1 ParallelUglifyPlugin ❌


你可能有听过 ParallelUglifyPlugin 插件,它可以帮助我们多进程压缩 JS,webpack5 的 TerserWebpackPlugin 默认就开启了多进程和缓存,无需再引入 ParallelUglifyPlugin。

1.2 CSS 压缩

使用 CssMinimizerWebpackPlugin 压缩 CSS 文件。

optimize-css-assets-webpack-plugin 相比,css-minimizer-webpack-plugin 在 source maps 和 assets 中使用查询字符串会更加准确,而且支持缓存和并发模式下运行。

CssMinimizerWebpackPlugin 将在 Webpack 构建期间搜索 CSS 文件,优化、压缩 CSS。

安装:

  1. npm i -D css-minimizer-webpack-plugin

webpack.prod.js 配置方式如下:

  1. const CssMinimizerPlugin = require("css-minimizer-webpack-plugin");
  2. module.exports = {
  3. optimization: {
  4. minimizer: [
  5. // 使用插件压缩CSS
  6. new CssMinimizerPlugin({
  7. parallel: 4,
  8. }),
  9. ],
  10. }
  11. }

由于 CSS 默认是放在 JS 文件中,因此本示例是基于下章节将 CSS 代码分离后的效果。