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 相关文章推荐
javascript延时加载之defer测试
Dec 28 Javascript
JS获取屏幕,浏览器窗口大小,网页高度宽度(实现代码)
Dec 17 Javascript
node.js中的fs.mkdir方法使用说明
Dec 17 Javascript
jquery插件uploadify多图上传功能实现代码
Aug 12 Javascript
EasyUI 结合JS导出Excel文件的实现方法
Nov 10 Javascript
完美解决jQuery fancybox ie 无法显示关闭按钮的问题
Nov 29 Javascript
JS中传递参数的几种不同方法比较
Jan 20 Javascript
Vue filters过滤器的使用方法
Jul 14 Javascript
jQuery实现键盘回车搜索功能
Jul 25 jQuery
react redux入门示例
Apr 19 Javascript
js实现图片上传并预览功能
Aug 06 Javascript
bootstrap tooltips在 angularJS中的使用方法
Apr 10 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的getter/setter基类的代码
2007/02/25 PHP
PHP统计目录大小的自定义函数分享
2014/11/18 PHP
配置php.ini实现PHP文件上传功能
2014/11/27 PHP
yii2使用GridView实现数据全选及批量删除按钮示例
2017/03/01 PHP
laravel-admin select框默认选中的方法
2019/10/03 PHP
phpstudy隐藏index.php的方法
2020/09/21 PHP
JavaScript 组件之旅(三):用 Ant 构建组件
2009/10/28 Javascript
javascript学习笔记(十二) RegExp类型介绍
2012/06/20 Javascript
JS判断客户端是手机还是PC的2个代码
2014/04/12 Javascript
JavaScript为事件句柄绑定监听函数实例详解
2015/12/15 Javascript
Bootstrap Img 图片样式(推荐)
2016/12/13 Javascript
javascript实现去除HTML标签的方法
2016/12/26 Javascript
jQuery实现的简单排序功能示例【冒泡排序】
2017/01/13 Javascript
vue组件命名和props命名代码详解
2019/09/01 Javascript
Node中对非阻塞I/O、事件循环的知识点总结
2020/01/05 Javascript
django1.8使用表单上传文件的实现方法
2016/11/04 Python
使用Python实现博客上进行自动翻页
2017/08/23 Python
django实现用户登陆功能详解
2017/12/11 Python
python实现弹跳小球
2019/05/13 Python
Python Django 封装分页成通用的模块详解
2019/08/21 Python
postman和python mock测试过程图解
2020/02/22 Python
tensorflow模型文件(ckpt)转pb文件的方法(不知道输出节点名)
2020/04/22 Python
Python urllib.request对象案例解析
2020/05/11 Python
Mysql数据库反向生成Django里面的models指令方式
2020/05/18 Python
keras.utils.to_categorical和one hot格式解析
2020/07/02 Python
Python plt 利用subplot 实现在一张画布同时画多张图
2021/02/26 Python
boostrap modal 闪现问题的解决方法
2020/09/01 HTML / CSS
世界上最好的足球商店:Unisport
2019/03/02 全球购物
MyHeritage美国:家族史研究和DNA测试的领先服务
2019/05/27 全球购物
青年教师培训方案
2014/02/06 职场文书
房地产销售经理岗位职责
2015/02/02 职场文书
2015年万圣节活动总结
2015/03/24 职场文书
六一儿童节新闻稿
2015/07/17 职场文书
python 用递归实现通用爬虫解析器
2021/04/16 Python
ObjectMapper 如何忽略字段大小写
2021/06/29 Java/Android
mysql 排序失效
2022/05/20 MySQL