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.ui.progressbar 中文文档
Nov 26 Javascript
JQuery扩展插件Validate—4设置错误提示的样式
Sep 05 Javascript
js 与 php 通过json数据进行通讯示例
Mar 26 Javascript
JS给Textarea文本框添加行号的方法
Aug 20 Javascript
10个很棒的jQuery代码片段
Sep 24 Javascript
用headjs来管理和加载js 提高网站加载速度
Nov 29 Javascript
setTimeout学习小结
Feb 08 Javascript
Three.js获取鼠标点击的三维坐标示例代码
Mar 24 Javascript
Vue.js展示AJAX数据简单示例讲解
Mar 29 Javascript
vue2.0+ 从插件开发到npm发布的示例代码
Apr 28 Javascript
swiper在vue项目中loop循环轮播失效的解决方法
Sep 15 Javascript
Vue之封装公用变量以及实现方式
Jul 31 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中检查PHP文件是否有语法错误的方法
2009/12/23 PHP
php中sql注入漏洞示例 sql注入漏洞修复
2014/01/24 PHP
PHP队列用法实例
2014/11/05 PHP
PHP通过内置函数memory_get_usage()获取内存使用情况
2014/11/20 PHP
php实现头像上传预览功能
2017/04/27 PHP
Laravel框架基于ajax和layer.js实现无刷新删除功能示例
2019/01/17 PHP
浅谈php使用curl模拟多线程发送请求
2019/03/08 PHP
yepnope.js使用详解及示例分享
2014/06/23 Javascript
分享一个常用的javascript静态类
2014/12/31 Javascript
js实现图片和链接文字同步切换特效的方法
2015/02/20 Javascript
nodejs实现HTTPS发起POST请求
2015/04/23 NodeJs
jquery中键盘事件小结
2016/02/24 Javascript
用js实现简单算法的实例代码
2016/09/24 Javascript
详解ES6之async+await 同步/异步方案
2017/09/19 Javascript
浅谈Node.js之异步流控制
2017/10/25 Javascript
解决layer.open弹出框不能获取input框的值为空的问题
2019/09/10 Javascript
深入理解Antd-Select组件的用法
2020/02/25 Javascript
vue开发中遇到的问题总结
2020/04/07 Javascript
es6函数之尾递归用法实例分析
2020/04/25 Javascript
使用python在本地电脑上快速处理数据
2017/06/22 Python
python+selenium识别验证码并登录的示例代码
2017/12/21 Python
详解Python核心编程中的浅拷贝与深拷贝
2018/01/07 Python
Python同步遍历多个列表的示例
2019/02/19 Python
Python单元测试与测试用例简析
2019/11/09 Python
python 有效的括号的实现代码示例
2019/11/11 Python
tensorboard实现同时显示训练曲线和测试曲线
2020/01/21 Python
python 获取字典特定值对应的键的实现
2020/09/29 Python
html5开发之viewport使用
2013/10/17 HTML / CSS
意大利香水和彩妆护肤品购物网站:Ditano
2017/08/13 全球购物
Mio Skincare法国官网:身体紧致及孕期身体护理
2018/04/04 全球购物
卡骆驰德国官方网站:Crocs德国
2019/03/29 全球购物
世界上最受欢迎的钓鱼诱饵:Rapala
2019/05/02 全球购物
英语求职信范文
2014/05/23 职场文书
声乐专业大学生职业生涯规划书:理想的未来需要自己去打造
2014/09/20 职场文书
单位实习工作证明怎么写
2014/11/02 职场文书
Python爬取用户观影数据并分析用户与电影之间的隐藏信息!
2021/06/29 Python