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 相关文章推荐
ExtJS 简介 让你知道extjs是什么
Dec 29 Javascript
JS图片浏览组件PhotoLook的公开属性方法介绍和进阶实例代码
Nov 09 Javascript
Js 去掉字符串中的空格(实现代码)
Nov 19 Javascript
jQuery修改class属性和CSS样式整理
Jan 30 Javascript
js实现精确到秒的倒计时效果
May 29 Javascript
微信小程序图表插件(wx-charts)实例代码
Jan 17 Javascript
Angular Renderer (渲染器)的具体使用
May 03 Javascript
手淘flexible.js框架使用和源代码讲解小结
Oct 15 Javascript
vue插槽slot的理解和使用方法
Apr 03 Javascript
Vue开发之watch监听数组、对象、变量操作分析
Apr 25 Javascript
layui默认选中table的CheckBox复选框方法
Sep 19 Javascript
vue-admin-template配置快捷导航的代码(标签导航栏)
Sep 04 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基于GD2函数库实现验证码功能示例
2019/01/27 PHP
JS判断页面加载状态以及添加遮罩和缓冲动画的代码
2012/10/11 Javascript
jquery中加载图片自适应大小主要实现代码
2013/08/23 Javascript
JQuery文本改变触发事件如聚焦事件、失焦事件
2014/01/15 Javascript
JavaScript判断用户名和密码不能为空的实现代码
2016/05/16 Javascript
javascript中异常处理案例(推荐)
2016/10/03 Javascript
bootstrap基础知识学习笔记
2016/11/02 Javascript
JS限制条件补全问题实例分析
2016/12/16 Javascript
Angular在模板驱动表单中自定义校验器的方法
2017/08/09 Javascript
canvas基础绘制-绚丽倒计时的实例
2017/09/17 Javascript
node.js读取Excel数据(下载图片)的方法示例
2018/08/02 Javascript
jQuery实现动画、消失、显现、渐出、渐入效果示例
2018/09/06 jQuery
element-ui带输入建议的input框踩坑(输入建议空白以及会闪出上一次的输入建议问题)
2019/01/15 Javascript
基于layPage插件实现两种分页方式浅析
2019/07/27 Javascript
vue中动态select的使用方法示例
2019/10/28 Javascript
vue祖孙组件之间的数据传递案例
2020/12/07 Vue.js
js实现简单的轮播图效果
2020/12/13 Javascript
举例讲解Python设计模式编程中对抽象工厂模式的运用
2016/03/02 Python
python opencv设置摄像头分辨率以及各个参数的方法
2018/04/02 Python
python基于socket进行端口转发实现后门隐藏的示例
2019/07/25 Python
Django Rest framework频率原理与限制
2019/07/26 Python
python函数局部变量、全局变量、递归知识点总结
2019/11/15 Python
wxPython窗体拆分布局基础组件
2019/11/19 Python
Pyecharts地图显示不完成问题解决方案
2020/05/11 Python
Python xml、字典、json、类四种数据类型如何实现互相转换
2020/05/27 Python
详解修改Anaconda中的Jupyter Notebook默认工作路径的三种方式
2021/01/24 Python
突袭HTML5之Javascript API扩展2—地理信息服务及地理位置API学习
2013/01/31 HTML / CSS
毕业生的自我评价范文
2013/12/31 职场文书
经典导游欢迎词大全
2014/01/16 职场文书
大学新生军训方案
2014/05/03 职场文书
2016年6月份红领巾广播稿
2015/12/21 职场文书
2016应届毕业生就业指导课心得体会
2016/01/15 职场文书
《角的度量》教学反思
2016/02/18 职场文书
有趣的二维码:使用MyQR和qrcode来制作二维码
2021/05/10 Python
一些让Python代码简洁的实用技巧总结
2021/08/23 Python
MySQL详解进行JDBC编程与增删改查方法
2022/06/16 MySQL