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实现点击同时更改两个iframe的网址
Jul 01 Javascript
基于jquery的让textarea自适应高度的插件
Aug 03 Javascript
jquery拖动插件(jquery.drag)使用介绍
Jun 18 Javascript
jQuery大于号(>)选择器的作用解释
Jan 13 Javascript
JavaScript必知必会(九)function 说起 闭包问题
Jun 08 Javascript
Bootstrap编写一个同时适用于PC、平板、手机的登陆页面
Jun 30 Javascript
浅析Node.js:DNS模块的使用
Nov 23 Javascript
详解Angular.js中$http拦截器的介绍及使用
Jul 04 Javascript
JavaScript事件对象event用法分析
Jul 27 Javascript
手把手带你入门微信小程序新框架Kbone的使用
Feb 25 Javascript
解决vue中的无限循环问题
Jul 27 Javascript
如何将JavaScript将数组转为树形结构
Jun 02 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
ThinkPHP中自定义错误页面和提示页面实例
2014/11/22 PHP
解决php的“It is not safe to rely on the system’s timezone settings”问题
2015/10/08 PHP
PHP简单实现模拟登陆功能示例
2017/09/15 PHP
Yii使用EasyWechat实现小程序获取用户的openID的方法
2020/04/29 PHP
jQuery写fadeTo示例代码
2014/02/21 Javascript
javascript判断office版本示例
2014/04/11 Javascript
JavaScript 实现打印,打印预览,打印设置
2014/12/30 Javascript
快速学习JavaScript的6个思维技巧
2015/10/13 Javascript
JS实现Ajax的方法分析
2016/12/20 Javascript
javascript cookie的基本操作(添加和删除)
2017/07/24 Javascript
VueJS事件处理器v-on的使用方法
2017/09/27 Javascript
vue服务端渲染缓存应用详解
2018/09/12 Javascript
微信小程序跨页面数据传递事件响应实现过程解析
2019/12/19 Javascript
vue 动态组件(component :is) 和 dom元素限制(is)用法说明
2020/09/04 Javascript
基于vue hash模式微信分享#号的解决
2020/09/07 Javascript
python实现系统状态监测和故障转移实例方法
2013/11/18 Python
Python编写检测数据库SA用户的方法
2014/07/11 Python
用Python实现一个简单的能够上传下载的HTTP服务器
2015/05/05 Python
使用Python的Flask框架构建大型Web应用程序的结构示例
2016/06/04 Python
pyspark.sql.DataFrame与pandas.DataFrame之间的相互转换实例
2018/08/02 Python
Python实现iOS自动化打包详解步骤
2018/10/03 Python
如何通过Python实现标签云算法
2019/07/02 Python
python安装本地whl的实例步骤
2019/10/12 Python
python对象转字典的两种实现方式示例
2019/11/07 Python
Pytorch Tensor 输出为txt和mat格式方式
2020/01/03 Python
python GUI框架pyqt5 对图片进行流式布局的方法(瀑布流flowlayout)
2020/03/12 Python
python实现一次性封装多条sql语句(begin end)
2020/06/06 Python
python中通过pip安装库文件时出现“EnvironmentError: [WinError 5] 拒绝访问”的问题及解决方案
2020/08/11 Python
LEGO玩具英国官方商店:LEGO Shop GB
2018/03/27 全球购物
德国游戏机商店:Konsolenkost
2019/12/08 全球购物
货物运输服务质量承诺书
2014/05/29 职场文书
财务管理专业毕业生求职信
2014/06/02 职场文书
三好学生个人总结
2015/02/15 职场文书
PHP遍历数组的6种方式总结
2021/11/17 PHP
springboot layui hutool Excel导入的实现
2022/03/31 Java/Android
Java 超详细讲解ThreadLocal类的使用
2022/04/07 Java/Android