← 返回目录

第 3 卷

第 3 / 26 卷日期:

14priority: -20, 15reuseExistingChunk: true, // 复用已存在的 chunk

16} 17}

18},

19runtimeChunk: 'single',//将运行时代码拆分为单独的chunk,避免缓存失效
20}
21}
  1. 资源优化(非 JS 资源)

• CSS 优化:

提取 CSS 为单独文件(避免内嵌在 JS 中,实现样式按需加载),并压缩 CSS 代码:

Code block

1const MiniCssExtractPlugin = require('mini-css-extract-plugin');

2const CssMinimizerPlugin = require('css-minimizer-webpack-plugin');

3 4module.exports = {

5module: { 6rules: [

7{ 8test: /\.css$/,

9use: [MiniCssExtractPlugin.loader, 'css-loader'],//提取CSS
10},
11]
12 },
13 plugins: [
14new MiniCssExtractPlugin({
15filename: '[name].[contenthash].css',// CSS文件哈希命名
16}),
17 ],
18 optimization: {
19minimizer: [
20`...`,//保留默认JS压缩器
21new CssMinimizerPlugin(),//压缩CSS
22],
23 }
24 }

• 图片/字体等静态资源优化:

Code block

1module.exports = { 2module: {

3rules: [ 4{

5test: /\.(png|jpe?g|gif|svg)$/i,
6type: 'asset',
7parser: {
8dataUrlCondition: {
9maxSize: 8 * 1024,//小于8kb的图片转Base64
10}
11},
12generator: {
13filename: 'images/[name].[contenthash][ext]',//图片输出路径
14}
15},
16{
17test: /\.(woff|woff2|eot|ttf|otf)$/i,
18type: 'asset/resource',
19generator: {
20filename: 'fonts/[name].[contenthash][ext]',//字体输出路径
21}
22}
23]
24 }
25 }
  1. 缓存优化(提高浏览器加载速度)

• 哈希命名:

使用 [contenthash] 为 bundle 文件命名(文件内容不变,哈希值不变;文件内容改变,哈希值改变),结合浏览器强缓存(Cache-Control: max-age=31536000),实现静态资源长效缓存。

• 清空 dist 目录:

配置 output.clean: true(Webpack 5+),或使用 CleanWebpackPlugin(Webpack 4),打包前清空 dist 目录,避免旧文件残留。

  1. 其他优化

• 压缩 JS 代码:

Code block

1const TerserPlugin = require('terser-webpack-plugin');

2 3module.exports = {

4optimization: { 5minimizer: [

6new TerserPlugin({

7parallel: true,//并行压缩(多线程)
8terserOptions: {
9compress: {
10drop_console: true,//删除console.log
11},
12mangle: true,//混淆变量名
13}
14}),
15],
16 }
17 }

• 排除无用依赖:

使用 externals 配置,将第三方依赖(如 React、Vue)排除在打包范围外,通过 CDN 引入,减小 bundle 体积:

Code block

1module.exports = { 2externals: {

3react: 'React', 4'react-dom': 'ReactDOM',

5} 6}

然后在 HTML 中通过 CDN 引入:

Code block

1<script

</script>

全站分卷索引 · 26 卷
  1. 1第 1 卷
  2. 2第 2 卷
  3. 3第 3 卷
  4. 4第 4 卷
  5. 5第 5 卷
  6. 6第 6 卷
  7. 7第 7 卷
  8. 8第 8 卷
  9. 9第 9 卷
  10. 10第 10 卷
  11. 11第 11 卷
  12. 12第 12 卷
  13. 13第 13 卷
  14. 14第 14 卷
  15. 15第 15 卷
  16. 16第 16 卷
  17. 17第 17 卷
  18. 18第 18 卷
  19. 19第 19 卷
  20. 20第 20 卷
  21. 21第 21 卷
  22. 22第 22 卷
  23. 23第 23 卷
  24. 24第 24 卷
  25. 25第 25 卷
  26. 26第 26 卷