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 相关文章推荐
this[] 指的是什么内容 讨论
Mar 24 Javascript
JavaScript 乱码问题
Aug 06 Javascript
JavaScript 对象的属性和方法4种不同的类型
Mar 19 Javascript
JavaScript中的数组操作介绍
Dec 30 Javascript
jQuery学习笔记之2个小技巧
Jan 19 Javascript
深入浅析JavaScript面向对象和原型函数
Feb 06 Javascript
js停止冒泡和阻止浏览器默认行为的简单方法
May 15 Javascript
8 行 Node.js 代码实现代理服务器
Dec 05 Javascript
Angularjs 实现移动端在线测评效果(推荐)
Apr 05 Javascript
Angular在模板驱动表单中自定义校验器的方法
Aug 09 Javascript
react 实现页面代码分割、按需加载的方法
Apr 03 Javascript
从组件封装看Vue的作用域插槽的实现
Feb 12 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
如何在PHP中使用Oracle数据库(1)
2006/10/09 PHP
基于Zend的Captcha机制的应用
2013/05/02 PHP
PHP时间戳 strtotime()使用方法和技巧
2013/10/29 PHP
PHP实现返回JSON和XML的类分享
2015/01/28 PHP
php实现递归的三种基本方式
2020/07/04 PHP
CI框架封装的常用图像处理方法(缩略图,水印,旋转,上传等)
2016/11/22 PHP
PHP实现RTX发送消息提醒的实例代码
2017/01/03 PHP
利用PHP实现一个简单的用户登记表示例
2017/04/25 PHP
PHP Include文件实例讲解
2019/02/15 PHP
利用location.hash实现跨域iframe自适应
2010/05/04 Javascript
js汉字排序问题 支持中英文混排,兼容各浏览器,包括CHROME
2011/12/20 Javascript
node.js中的buffer.fill方法使用说明
2014/12/14 Javascript
FullCalendar日历插件应用之数据展现(一)
2015/12/23 Javascript
jQuery获取radio选中项的值实例
2016/06/18 Javascript
vue服务端渲染操作简单入门实例分析
2019/08/28 Javascript
layui实现把数据表格时间戳转换为时间格式的例子
2019/09/12 Javascript
Vue 利用指令实现禁止反复发送请求的两种方法
2019/09/15 Javascript
微信小程序如何实现radio单选框单击打勾和取消
2020/01/21 Javascript
ES6 class类链式继承,实例化及react super(props)原理详解
2020/02/15 Javascript
[00:13]天涯墨客二技能展示
2018/08/25 DOTA
python 批量修改 labelImg 生成的xml文件的方法
2019/09/09 Python
python超时重新请求解决方案
2019/10/21 Python
Python urllib.request对象案例解析
2020/05/11 Python
小白教你PyCharm从下载到安装再到科学使用PyCharm2020最新激活码
2020/09/25 Python
Python使用内置函数setattr设置对象的属性值
2020/10/16 Python
如何为DataGridView添加一个定制的Column Type
2014/01/21 面试题
在Ajax应用中信息是如何在浏览器和服务器之间传递的
2016/05/31 面试题
银行会计职员个人的自我评价
2013/09/29 职场文书
公司离职证明范本
2014/01/13 职场文书
体育教师求职信
2014/05/24 职场文书
优秀学生干部个人事迹材料
2014/06/02 职场文书
药剂专业自荐书
2014/06/20 职场文书
高考1977观后感
2015/06/04 职场文书
掌握一个领域知识,高效学习必备方法
2019/08/08 职场文书
Python爬虫之爬取某文库文档数据
2021/04/21 Python
python数字图像处理之对比度与亮度调整示例
2022/06/28 Python