webpack HappyPack实战详解


Posted in Javascript onOctober 08, 2019

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

我们需要Webpack 能同一时间处理多个任务,发挥多核 CPU 电脑的威力,HappyPack 就能让 Webpack 做到这点,它把任务分解给多个子进程去并发的执行,子进程处理完后再把结果发送给主进程。

由于 JavaScript 是单线程模型,要想发挥多核 CPU 的能力,只能通过多进程去实现,而无法通过多线程实现。

提示:由于HappyPack 对file-loader、url-loader 支持的不友好,所以不建议对该loader使用。

安装 HappyPack

npm i -D happypack

运行机制

webpack HappyPack实战详解

使用 HappyPack

修改你的webpack.config.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',
   //如何处理 用法和loader 的配置一样
   loaders: [{
    loader: 'babel-loader?cacheDirectory=true',
   }],
   //共享进程池
   threadPool: happyThreadPool,
   //允许 HappyPack 输出日志
   verbose: true,
  })
 ]
}
  1. 在 Loader 配置中,所有文件的处理都交给了 happypack/loader 去处理,使用紧跟其后的 querystring ?id=babel 去告诉 happypack/loader 去选择哪个 HappyPack 实例去处理文件。
  2. 在 Plugin 配置中,新增了两个 HappyPack 实例分别用于告诉 happypack/loader 去如何处理 .js 和 .css 文件。选项中的 id 属性的值和上面 querystring 中的 ?id=babel 相对应,选项中的 loaders 属性和 Loader 配置中一样。

HappyPack 参数

  • id: String 用唯一的标识符 id 来代表当前的 HappyPack 是用来处理一类特定的文件.
  • loaders: Array 用法和 webpack Loader 配置中一样.
  • threads: Number 代表开启几个子进程去处理这一类型的文件,默认是3个,类型必须是整数。
  • verbose: Boolean 是否允许 HappyPack 输出日志,默认是 true。
  • threadPool: HappyThreadPool 代表共享进程池,即多个 HappyPack 实例都使用同一个共享进程池中的子进程去处理任务,以防止资源占用过多。
  • verboseWhenProfiling: Boolean 开启webpack --profile ,仍然希望HappyPack产生输出。
  • debug: Boolean 启用debug 用于故障排查。默认 false。

总结

如果想详细了解happypack的原理 可以看这篇文章
happypack 原理解析

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery png 透明解决方案(推荐)
Aug 21 Javascript
Extjs4 GridPanel的主要配置参数详细介绍
Apr 18 Javascript
初识SmartJS - AOP三剑客
Jun 08 Javascript
浅谈JavaScript Date日期和时间对象
Dec 29 Javascript
实现前后端数据交互方法汇总
Apr 07 Javascript
JavaScript DOM基础
Apr 13 Javascript
jquery在ie7下选择器的问题导致append失效的解决方法
Jan 10 Javascript
详解AngularJS中$http缓存以及处理多个$http请求的方法
Feb 06 Javascript
解决js相同的正则多次调用test()返回的值却不同的问题
Oct 10 Javascript
mpvue 页面预加载新增preLoad生命周期的两种方式
Oct 17 Javascript
vue中上传视频或图片或图片和文字一起到后端的解决方法
Dec 01 Javascript
Openlayers绘制地图标注
Sep 28 Javascript
简单了解vue中的v-if和v-show的区别
Oct 08 #Javascript
在Koa.js中实现文件上传的接口功能
Oct 08 #Javascript
vue-cli和v-charts实现可视化图表过程解析
Oct 08 #Javascript
vue路由传参页面刷新参数丢失问题解决方案
Oct 08 #Javascript
vux-scroller实现移动端上拉加载功能过程解析
Oct 08 #Javascript
深入学习Vue nextTick的用法及原理
Oct 08 #Javascript
jQuery 筛选器简单操作示例
Oct 02 #jQuery
You might like
信用卡效验程序
2006/10/09 PHP
一个可以显示阴历的JS代码
2007/03/05 Javascript
基于jquery DOM写的类似微博发布的效果
2012/10/20 Javascript
extjs两个tbar问题探讨
2013/08/08 Javascript
PHP+mysql+Highcharts生成饼状图
2015/05/04 Javascript
详解AngularJS中module模块的导入导出
2015/12/10 Javascript
基于JavaScript将表单序列化类型的数据转化成对象的处理(允许对象中包含对象)
2015/12/28 Javascript
新手学习前端之js模仿淘宝主页网站
2016/10/31 Javascript
详谈jQuery中的一些正则匹配表达式
2017/03/08 Javascript
微信小程序动态的加载数据实例代码
2017/04/14 Javascript
微信小程序 自定义Toast实例代码
2017/06/12 Javascript
vue组件发布到npm简单步骤
2017/11/30 Javascript
自定义vue组件发布到npm的方法
2018/05/09 Javascript
jquery引入外部CDN 加载失败则引入本地jq库
2018/05/23 jQuery
node实现生成带参数的小程序二维码并保存到本地功能示例
2018/12/05 Javascript
bootstrap与pagehelper实现分页效果
2018/12/29 Javascript
vue.js实现的幻灯片功能示例
2019/01/18 Javascript
JS对象和字符串之间互换操作实例分析
2019/02/02 Javascript
使用Vue调取接口,并渲染数据的示例代码
2019/10/28 Javascript
vue 指令和过滤器的基本使用(品牌管理案例)
2019/11/04 Javascript
JavaScript简易计算器制作
2020/01/17 Javascript
Vue实现手机计算器
2020/08/17 Javascript
通过JS判断网页是否为手机打开
2020/10/28 Javascript
python使用append合并两个数组的方法
2015/04/28 Python
Python MySQLdb Linux下安装笔记
2015/05/09 Python
解决python selenium3启动不了firefox的问题
2018/10/13 Python
Python用SSH连接到网络设备
2021/02/18 Python
英国最大的女性服装零售商:Dorothy Perkins
2017/03/30 全球购物
介绍一下SQL注入攻击的种类和防范手段
2012/02/18 面试题
留学推荐信怎么写
2014/01/25 职场文书
工作失职检讨书500字
2014/10/17 职场文书
护士2014年终工作总结
2014/11/11 职场文书
初中班主任工作总结2015
2015/05/13 职场文书
焦点访谈观后感
2015/06/11 职场文书
深入理解python协程
2021/06/15 Python
Shell中的单中括号和双中括号的用法详解
2022/12/24 Servers