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 相关文章推荐
JS option location 页面跳转实现代码
Dec 27 Javascript
jquery之empty()与remove()区别说明
Sep 10 Javascript
发布一个基于javascript的动画类 Fx.js
Nov 05 Javascript
jquery触发a标签跳转事件示例代码
Jul 21 Javascript
jquery如何实现锚点链接之间的平滑滚动
Dec 02 Javascript
js处理php输出时间戳对不上号的解决方法
Jun 20 Javascript
node.js路径处理方法以及绝对路径详解
Mar 04 Javascript
JavaScript定义全局对象的方法示例
Jan 12 Javascript
详解angularJs指令的3种绑定策略
Apr 13 Javascript
详解vue2.0脚手架的webpack 配置文件分析
May 27 Javascript
Vue使用vue-area-linkage实现地址三级联动效果的示例
Jun 27 Javascript
微信小程序前端自定义分享的实现方法
Jun 13 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
PHP5函数小全(分享)
2013/06/06 PHP
PHP生成短网址的3种方法代码实例
2014/07/08 PHP
php实现从上传文件创建缩略图的方法
2015/04/02 PHP
PHP实现Google plus的好友拖拽分组效果
2016/10/21 PHP
ext 同步和异步示例代码
2009/09/18 Javascript
jQuery对表单元素的取值和赋值操作代码
2011/05/19 Javascript
自己使用js/jquery写的一个定制对话框控件
2014/05/02 Javascript
JavaScript日期时间与时间戳的转换函数分享
2015/01/31 Javascript
jquery+CSS实现的多级竖向展开树形TRee菜单效果
2015/08/24 Javascript
js轮播图代码分享
2016/07/14 Javascript
用iframe实现不刷新整个页面上传图片的实例
2016/11/18 Javascript
jQuery手风琴的简单制作
2017/05/12 jQuery
如何使node也支持从url加载一个module详解
2018/06/05 Javascript
vue+Element-ui实现分页效果实例代码详解
2018/12/10 Javascript
通过实例了解js函数中参数的传递
2019/06/15 Javascript
Vue请求java服务端并返回数据代码实例
2019/11/28 Javascript
js实现移动端吸顶效果
2020/01/08 Javascript
手把手带你入门微信小程序新框架Kbone的使用
2020/02/25 Javascript
Python 正则表达式操作指南
2009/05/04 Python
Python实现完整的事务操作示例
2017/06/20 Python
Python跨文件全局变量的实现方法示例
2017/12/10 Python
详解Python requests 超时和重试的方法
2018/12/18 Python
Pyqt清空某一个QTreeewidgetItem下的所有分支方法
2019/06/17 Python
Python 3.8 新功能大揭秘【新手必学】
2020/02/05 Python
vue.js刷新当前页面的实例讲解
2020/12/29 Python
Python调用系统命令os.system()和os.popen()的实现
2020/12/31 Python
python 实现百度网盘非会员上传超过500个文件的方法
2021/01/07 Python
世界知名接发和假发品牌:Poze Hair
2017/03/08 全球购物
Chain Reaction Cycles芬兰:世界上最大的在线自行车商店
2017/12/06 全球购物
英国复古皮包品牌:Beara Beara
2018/07/18 全球购物
速卖通欧盟:Aliexpress EU
2020/08/19 全球购物
奥巴马的演讲稿
2014/05/15 职场文书
未婚证明格式
2015/06/15 职场文书
2016清明节森林防火广播稿
2015/12/17 职场文书
如何Python使用re模块实现okenizer
2022/04/30 Python
pytest实现多进程与多线程运行超好用的插件
2022/07/15 Python