webpack5 - 之 生产环境的优化(dist压缩包、copy静态资源、缓存、代码切片、多线程打包、抽离重复代码 与 最小化 entry chunk)

1:webpack5 - 之 生产环境 dist压缩包

package.json

  "devDependencies": {
    "zip-webpack-plugin": "^4.0.1"
  },

webpack.pro.js

const merge = require('webpack-merge');
const baseConfig = require('./webpack.base');
const ZipPlugin = require('zip-webpack-plugin') // 打包后 压缩dist

const proConfig = {
  mode: 'production',
  devtool: 'hidden-source-map',
  plugins: [
    // 压缩 zip文件
    new ZipPlugin({
      // path: './', //路径名
      path: 'zip',
      filename: 'dist.zip' //打包名
    })
  ]
}

module.exports = merge(baseConfig, proConfig)

npm run build效果

在这里插入图片描述

2:webpack5 - 之 生产环境 copy静态资源

package.json

  "devDependencies": {
    "copy-webpack-plugin": "^11.0.0"
  },

webpack.pro.js

const path = require('path')
const merge = require('webpack-merge');
const baseConfig = require('./webpack.base');
const CopyWebpackPlugin = require('copy-webpack-plugin') // 复制静态资源的插件

const proConfig = {
  mode: 'production',
  devtool: 'hidden-source-map',
  plugins: [
    new CopyWebpackPlugin({
      patterns: [{
        from: path.join(__dirname,'../public'),
        to: 'public',
        globOptions: {
          ignore: [
            '**/.*'
          ]
        }
      }]
    })
  ]

}

module.exports = merge(baseConfig, proConfig)

npm run build效果

在这里插入图片描述

3:webpack5 - 之 测试环境 缓存

webpack.dev.js

  • cache 缓存
const merge = require('webpack-merge')
const baseConfig = require('./webpack.base');
const devConfig = {
  mode: 'development',
  // dev缓存
  cache: {
    type: 'memory'
  },
}
module.exports = merge(baseConfig, devConfig)

npm run dev效果

  • 没加缓存前 2550ms
    在这里插入图片描述

  • 加缓存前 2402ms
    在这里插入图片描述

4:webpack5 - 之 生产环境 缓存

webpack.pro.js

  • cache 缓存
const merge = require('webpack-merge');
const baseConfig = require('./webpack.base');

const proConfig = {
  mode: 'production',
  devtool: 'hidden-source-map',
  cache: {
    type: 'filesystem',
    buildDependencies: {
      config: [__filename]
    }
  },
}

module.exports = merge(baseConfig, proConfig)

npm run build效果

  • 没有缓存前 2706ms
    在这里插入图片描述

  • 有缓存 2693ms
    在这里插入图片描述

5:webpack5 - 之 生产环境 代码切片

webpack.pro.js

const path = require('path')
const merge = require('webpack-merge');
const baseConfig = require('./webpack.base');

const proConfig = {
  mode: 'production',
  devtool: 'hidden-source-map',
  optimization: {
    // 代码切片
    splitChunks: {
      chunks: 'all',
    }
  },
  plugins: [
  ]
}

module.exports = merge(baseConfig, proConfig)

npm run build效果

  • 没有切片前 4525ms
    在这里插入图片描述

  • 切片 4260ms
    在这里插入图片描述

6:webpack5 - 之 多线程打包

package.json

  "devDependencies": {
    "thread-loader": "^3.0.4"
  },

webpack.base.js

  • 加了 thread-loader 这个处理之
const path = require('path')
const MiniCssExtract = require('mini-css-extract-plugin') // css提取

module.exports = {
  entry: {
    main: './src/main.js'
  },
  output: {
    publicPath: '',
    path: path.resolve(__dirname, '../dist'),
    filename: 'js/[name]_[contenthash:6].js',
  },
  // loader相关配置
  module: {
    rules: [{
        test: /\.(scss|css)$/, // 针对 .scss 或者 .css 后缀的文件设置 loader
        use: [
          // env.development ? 'style-loader' : 
          {
            loader: MiniCssExtract.loader
          },
          'css-loader',
          'postcss-loader',
          'sass-loader' // 使用 sass-loader 将 scss 转为 css
        ]
      },
      {
        test: /\.js$/,
        use: [
          {
            loader: 'babel-loader',
            options: {
              cacheDirectory: true
            },
          },
          {
            loader: 'thread-loader',
            options: {
              workers: 3,
            }
          }
        ],
        exclude: /node_modules/
      },

    ]
  },
  plugins: [
  ]
}
  • 结论,当项目较小时,使用多进程打包反而造成打包时间延长,因为进程之间通信产生的开销比多进程能够节约的时间更长。

7:webpack5 - 之 抽离重复代码 与 最小化 entry chunk

webpack.pro.js

const path = require('path')
const merge = require('webpack-merge');
const baseConfig = require('./webpack.base');

const proConfig = {
  mode: 'production',
  devtool: 'hidden-source-map',
  cache: {
    type: 'filesystem',
    buildDependencies: {
      config: [__filename]
    }
  },
  optimization: {
    runtimeChunk: true, // 为运行时代码创建一个额外的 chunk,减少 entry chunk 体积,提高性能
    
    // 代码切片
    splitChunks: {
      chunks: 'all',
      // 重复打包问题
      cacheGroups:{
        vendors:{ // node_modules里的代码
          test: /[\\/]node_modules[\\/]/,
          chunks: "all",
          // name: 'vendors', 一定不要定义固定的name
          priority: 10, // 优先级
          enforce: true 
        }
      }
    }
  }
  plugins: [
  ]

}

module.exports = merge(baseConfig, proConfig)

npm run build效果

  • 前 4408ms
    在这里插入图片描述

  • 后 4325ms
    在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值