vue中webpack如何提升打包速度

  • 使用 webpack-parallel-uglify-plugin 插件来压缩代码

  • 优化原理

    • 默认情况下 webpack 使用 UglifyJS 插件进行代码压缩,但由于其采用单线程压缩,速度很慢

    • 我们可以改用 webpack-parallel-uglify-plugin 插件,它可以并行运行 UglifyJS 插件,从而更加充分、合理的使用 CPU 资源,从而大大减少构建时间

  • 操作步骤

    • 执行如下命令安装 webpack-parallel-uglify-plugin

    • cnpm i webpack-parallel-uglify-plugin -D
      // 指定版本 "webpack-parallel-uglify-plugin": "1.1.0"
    • 打开 build/webpack.prod.conf.js 文件,并作如下修改:

    • const ParallelUglifyPlugin = require('webpack-parallel-uglify-plugin')
      
      // 删掉 webpack 提供的 UglifyJS 插件
      // new UglifyJsPlugin({
          //   uglifyOptions: {
          //     compress: {
          //       warnings: false
          //     }
          //   },
          //   sourceMap: config.build.productionSourceMap,
          //   parallel: true
          // }),
          // 增加 webpack-parallel-uglify-plugin来替换
          new ParallelUglifyPlugin({
            cacheDir: '.cache/',
            uglifyJS: {
              output: {
                comments: false
              },
              warnings: false
            }
          }),

  • 使用 HappyPack 来加速代码构建

  • 运行在 Node.js 之上的 Webpack 是单线程模式的,所以 Webpack 需要处理的事情只能一件一件地做,不能多件事一起做。

  • 而 HappyPack 的处理思路是:将原有的 webpack 对 loader 的执行过程,从单一进程的形式扩展多进程模式,从而加速代码构建。

  • 操作步骤

    • 执行如下命令安装 happypack: 

    • cnpm i happypack os -D
    • 打开 build/webpack.base.conf.js 文件,并作如下修改:

    • const HappyPack = require('happypack')
      const os = require('os')
      const happyThreadPool = HappyPack.ThreadPool({ size: os.cpus().length })
      
      module.exports = {
        module: {
          rules: [
            {
              test: /\.js$/,
              //把对.js 的文件处理交给id为happyBabel 的HappyPack 的实例执行
              loader: 'happypack/loader?id=happyBabel',
              include: [resolve('src'), resolve('test'), resolve('node_modules/webpack-dev-server/client')]
            },
          ]
        },
        plugins: [
          new HappyPack({
            // 用id来标识 happypack处理那里类文件
            id: 'happyBabel',
            // 如何处理  用法和loader 的配置一样
            loaders: [{
              loader: 'babel-loader?cacheDirectory=true'
            }],
            // 共享进程池
            threadPool: happyThreadPool,
            // 允许 HappyPack 输出日志
            verbose: true
          })
        ],
      
      }
  • 保存后打包项目,npm run build 可以发现时间缩短到了22s左右

  • 没有改配置前,打包时间大概在98s左右

  • 修改配置后,打包时间大概在22s左右 

 

  总结

  1. 比较实用的方法: 按需加载,优化loader配置,关闭生产环境的sourceMap,CDN优化。

  2. vue-cli已做的优化: 代码压缩,提取公共代码,再优化空间不大。

  3. 根据项目实际需要和自身开发水平选择优化方法,必须避免因为优化产生bug。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值