提升webpack打包速度

针对version 4.x

1.升级webpack

vue-cli 目前搭建的vue项目生成的webpack版本为3.12.0 【date:2019/10/29】【vue版本为 2.9.6】对目前版本的webpack进行版本升级(选做)

命令:
npm update webpack@4.6.0 【升级webpack】
npm add webpack-dev-server webpack-cli -D【添加 webpack-dev-server 添加 webpack-cli】

2.使用happypack 对babel-laoder进行封装

happyPack 简介

加速原理:运行在nodeJS上的webpack是属于单线程,因此,webpack处理事情的时候需要一步一步来做,不可同时处理多件事情
我们需要webpack在同一时间处理多任务的时候,需要发挥多核cpu电脑的威力,HappyPack 可以把任务分解给多个子进程去并发的执行,子进程处理完后再把结果发送给主进程。

命令:
npm i happypack -d 安装happypack的插件
在vue-cli 生成的webpack.base.js 里输入

const HappyPack = require('happypack')	
const os = require('os') //os 是node 的os模块,引入了一些基本的系统操作函数	
const happyThreadPool = HappyPack.ThreadPool({ size: os.cpus().length })//返回一个数组对象, 包含安装的每个cpu的内核的基本信息:型号,速度,时间等

happypack逻辑图

修改webpack.base.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',
        //排除node_modules 目录下的文件
        exclude: /node_modules/
      },
    ]
  },
plugins: [
    new HappyPack({
        //用id来标识 happypack处理那里类文件
      id: 'happyBabel',//与modules中loader的id相同
      //如何处理  用法和loader 的配置一样
      loaders: [{
        loader: 'babel-loader?cacheDirectory=true',//开启缓存
      }],
      //共享进程池
      threadPool: happyThreadPool,
      //允许 HappyPack 输出日志
      verbose: true,
    })
  ]
}

· loader 配置中,将所有文件的处理交给happy/loader处理【例如上述代码中的js代码的编译,原本是通过bable-loader处理,现交给happy/loader 处理,然后通过参数id ,告知使用哪个happy/loader实例】

· 在 Plugin 配置中,新增HappyPack 实例用于告诉 happypack/loader 去如何处理 .js。选项中的 id 属性的值和上面 querystring 中的 ?id=babel 相对应,选项中的 loaders 属性和 Loader 配置中一样。

个人对于happyPack理解:

子进程中对文件的编译仍然是通过原本的loader处理,happyPack的作用在于,开启多个子进程,促使这些loader能在同一时间处理文件

3.js转译,开启缓存

bable-loader 有一项cacheDirectory的配置,默认为false,处于关闭状态,更改为true,开启js转译的缓存

当有设置时,指定的目录将用来缓存 loader 的执行结果。之后的 webpack 构建,将会尝试读取缓存,来避免在每次执行时,可能产生的、高性能消耗的 Babel 重新编译过程(recompilation process)。如果设置了一个空值 (loader: ‘babel-loader?cacheDirectory’) 或者 true (loader: babel-loader?cacheDirectory=true),loader 将使用默认的缓存目录

以上!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值