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 Tips(3) 关于$()包装集内元素的改变
Dec 14 Javascript
浅谈javascript中的作用域
Apr 07 Javascript
vue的事件绑定与方法详解
Aug 16 Javascript
React 高阶组件入门介绍
Jan 11 Javascript
javascript用rem来做响应式开发
Jan 13 Javascript
微信小程序使用form表单获取输入框数据的实例代码
May 17 Javascript
JavaScript实现京东购物放大镜和选项卡效果的方法分析
Jul 05 Javascript
react-native动态切换tab组件的方法
Jul 07 Javascript
微信小程序分享功能onShareAppMessage(options)用法分析
Apr 24 Javascript
axios封装,使用拦截器统一处理接口,超详细的教程(推荐)
May 02 Javascript
微信小程序实现form表单本地储存数据
Jun 27 Javascript
vue-cli3跨域配置的简单方法
Sep 06 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中通过语义URL防止网站被攻击的方法分享
2011/09/08 PHP
PHP超级全局变量数组小结
2012/10/04 PHP
php从csv文件读取数据并输出到网页的方法
2015/03/14 PHP
Smarty中的注释和截断功能介绍
2015/04/09 PHP
再Docker中架设完整的WordPress站点全攻略
2015/07/29 PHP
浅谈PHP之ThinkPHP框架使用详解
2020/07/21 PHP
TNC vs IO BO3 第二场2.13
2021/03/10 DOTA
可以支持多中格式的JS键盘
2007/05/02 Javascript
自动最大化窗口的Javascript代码
2013/05/22 Javascript
JavaScript 学习笔记之语句
2015/01/14 Javascript
最精简的JavaScript实现鼠标拖动效果的方法
2015/05/11 Javascript
bootstrapValidator表单验证插件学习
2016/12/30 Javascript
AngularJS动态绑定ng-options的ng-model实例代码
2017/06/21 Javascript
详解webpack介绍&安装&常用命令
2017/06/29 Javascript
jQuery幻灯片插件owlcarousel参数说明中文文档
2018/02/27 jQuery
浅谈Vue路由快照实现思路及其问题
2018/06/07 Javascript
JS实现中英文混合文字溢出友好截取功能
2018/08/06 Javascript
JS插入排序简单理解与实现方法分析
2019/11/25 Javascript
vue-property-decorator用法详解
2019/12/12 Javascript
jquery实现垂直手风琴导航栏
2020/02/18 jQuery
uniapp实现可滑动选项卡
2020/10/21 Javascript
[16:21]教你分分钟做大人:圣堂刺客
2014/12/03 DOTA
python getopt详解及简单实例
2016/12/30 Python
使用Python写CUDA程序的方法
2017/03/27 Python
django用户注册、登录、注销和用户扩展的示例
2018/03/19 Python
在python中使用pymysql往mysql数据库中插入(insert)数据实例
2020/03/02 Python
HTML5 Canvas 绘图——使用 Canvas 绘制图形图文教程 使用html5 canvas 绘制精美的图
2015/08/31 HTML / CSS
英国电视和家用电器购物网站:rlrdistribution.co.uk
2018/11/20 全球购物
如何查找和删除数据库中的重复数据
2014/11/05 面试题
简历的个人自我评价范文
2014/01/03 职场文书
初婚未育未抱养证明
2014/01/12 职场文书
在职党员进社区活动总结
2014/07/05 职场文书
个人租房协议书
2014/11/28 职场文书
求职简历自我评价怎么写
2015/03/10 职场文书
mysql升级到5.7时,wordpress导数据报错1067的问题
2021/05/27 MySQL
使用Oracle命令进行数据库备份与还原
2021/12/06 Oracle