由于运行在 Node.js 之上的 Webpack 是单线程模型的,所以Webpack 需要处理的事情需要一件一件的做,不能多件事一起做。
我们需要Webpack 能同一时间处理多个任务,发挥多核 CPU 电脑的威力,HappyPack 就能让 Webpack 做到这点,它把任务分解给多个子进程去并发的执行,子进程处理完后再把结果发送给主进程。

由于 JavaScript 是单线程模型,要想发挥多核 CPU 的能力,只能通过多进程去实现,而无法通过多线程实现。

提示:由于HappyPack 对file-loader、url-loader 支持的不友好,所以不建议对该loader使用。

安装 HappyPack

npm i -D happypack

运行机制

使用 HappyPack
修改你的webpack.config.js 文件或者 webpack.base.conf文件

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,})]
}

在 Loader 配置中,所有文件的处理都交给了 happypack/loader 去处理,使用紧跟其后的 querystring ?id=babel 去告诉 happypack/loader 去选择哪个 HappyPack 实例去处理文件。

在 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。

转载至:
作者:大饭团CC
链接:https://www.jianshu.com/p/b9bf995f3712
来源:简书

webpack优化之HappyPack 实战相关推荐

  1. vue项目中使用 webpack优化之HappyPack 实战

    由于运行在 Node.js 之上的 Webpack 是单线程模型的,所以Webpack 需要处理的事情需要一件一件的做,不能多件事一起做. 我们需要Webpack 能同一时间处理多个任务,发挥多核 C ...

  2. webpack优化之HappyPack实战

    由于运行在 Node.js 之上的 Webpack 是单线程模型的,所以Webpack 需要处理的事情需要一件一件的做,不能多件事一起做. 我们需要Webpack 能同一时间处理多个任务,发挥多核 C ...

  3. vue webpack优化之HappyPack 实战

    安装 HappyPack cnpm i -D happypack webpack.base.conf.js const HappyPack = require('happypack'); const ...

  4. 20、webpack优化(5)——happyPack多线程打包

    happyPack多线程打包 如何实现多线程打包? 安装happypack npm i happypack 改造webpack.config.js,实现多线程打包js let HappyPack = ...

  5. webpack优化 -- happypack

    webpack优化 -- happypack 前言:happypack是一个可以开启多线程转换loader的插件,可以在开发环境下提高编译速度,下面用vue-cli 2.x配合happypack优化一 ...

  6. 深入浅出的webpack构建工具---HappyPack优化构建(九)

    阅读目录 一:什么是HappyPack? 作用是什么? 二:如何在配置中使用HappyPack? 回到顶部 一:什么是HappyPack? 作用是什么? Webpack是允许在NodeJS中的,它是单 ...

  7. GitChat · 前端 | Webpack 工程的 PWA 实战

    GitChat 作者:Jrain'L 原文:Webpack 工程的 PWA 实战 关注微信公众号:GitChat 技术杂谈 ,一本正经的讲技术 前言 在现代化的前端开发中,webpack已经成为了标配 ...

  8. Webpack优化总会让你不得不爱

    在家的日子不能出去玩,不能出去吃,的确是很不开心的,不过也是真的增加了好多空闲时间 与其在家呆着无聊,不如安安静静的学习一下 疫情期间,不管怎样,心态不能崩,武汉加油,中国加油 闲言少叙,现在我们就开 ...

  9. 【优化】1288- 分享我的webpack优化经验,首屏渲染从9s到1s

    今天给大家分享一篇性能优化实战.本文基于vue2(虽然vue3已出,但是本文也很实用) 谈到webpack优化大部分人可能都看腻了,无非就那几招嘛,我之前也是看过许多类似的文章,但都没有自己真正上手过 ...

最新文章

  1. 20万个法人、百万条银行账户信息,正在暗网兜售
  2. tensorflow lstm 实现 RNN / LSTM 的关键几个步骤 多层通俗易懂
  3. ORACLE 数据字典
  4. cisco+++mysql_搭建cacti监控linux服务器,cisco,华为,mysql,
  5. Android编码实现软件界面
  6. 沈抚新区机器人产业园怎么_“智慧物流智能AGV技术交流峰会”在长春中日智能制造产业园成功举办...
  7. java根据pdf模板生成pdf_Java 复制、压缩PDF文档
  8. 启动之OS_CPU_C
  9. python中deepcopy函数_python – copy.deepcopy使用自定义的__new __()方法在对象上引发TypeError...
  10. 【剑指offer】_02替换空格
  11. 关于html和javascript在浏览器中的加载顺序问题的讨论(zz)
  12. linux lvm 磁盘管理
  13. 多图长文 | 聊聊C端转型B端产品那些事
  14. log4j 禁止类输出日志_springboot日志详解
  15. centos7.1下的mariadb数据库数据出现不支持中文问题
  16. 重新安装NVIDIA显卡驱动
  17. 【防火墙_动态路由-OSPF】
  18. linux查看网络端口状态命令行,Linux下用netstat查看网络状态、端口状态
  19. 实验四 JavaScript的使用(学习打卡Day 2)
  20. python 为女神编朵玫瑰花的代码,python绘制玫瑰的代码

热门文章

  1. 基于springboot在线竞价拍卖管理系统
  2. C++入门教程(三十五):函数类型
  3. c语言2010怎么添加行号,windows10系统下VS2010怎样显示行号
  4. html中两张图片怎么一上一下,使用一张或两张图片创建大背景网站
  5. 晕!常见视频接口转接器的原理简析
  6. 巴菲特:人一生中最重要的是专注
  7. 大数乘法【极简思路、代码模板】
  8. 社会工程学的预测展望
  9. 小学英语课堂教学与计算机的结合,信息技术在小学英语课堂教学中的有效运用...
  10. linux中gcc版本升级