由于运行在 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 文件

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

vue项目中使用 webpack优化之HappyPack 实战相关推荐

  1. vue项目中运用webpack动态配置打包多种环境域名

    在如今前后端分离,各种框架盛行的前端界,对项目的打包要求也越来越复杂,本人分享一个vue项目里,根据命令行输入不同的命令,打包出不同环境域名的方法.(欢迎纠错,谢谢.) 1. 安装插件 cross-e ...

  2. vue webpack优化之HappyPack 实战

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

  3. webpack优化之HappyPack实战

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

  4. webpack优化之HappyPack 实战

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

  5. vue 不生效 打包 样式_解决在vue项目中webpack打包后字体不生效的问题

    最近在项目开发过程中遇到如下问题:开发环境中设置的字体样式使用webpack打包后到生产环境不生效.如图: 打开控制台查看元素样式,发现在开发环境的时候"微软雅黑"被解析成unic ...

  6. vue项目中的 env文件从何而来?什么是 process.env

    start 在 vue 项目中,时常会遇到到这么一行代码 process.env 这东西是什么,怎么用? 今天一篇文章带你了解 process.env 1.使用场景 先别急,先看 vue 项目中的用法 ...

  7. canvas java 上传截图_在Vue项目中使用html2canvas生成页面截图并上传

    使用方法 项目中引入 npm install html2canvas html代码 //html代码 js代码 // 引入html2canvas import html2canvas from 'ht ...

  8. 如何在Vue项目中使用vw实现移动端适配(转)

    有关于移动端的适配布局一直以来都是众说纷纭,对应的解决方案也是有很多种.在<使用Flexible实现手淘H5页面的终端适配>提出了Flexible的布局方案,随着viewport单位越来越 ...

  9. vue项目中遇到的一些问题

    或访问:https://github.com/littleHiuman/experiences-about-vue  欢迎补充! vuex 状态 vue-cli 命令行 vue vue vue-rou ...

最新文章

  1. PCL点云分割(2)
  2. TP-LINK、迅捷等品牌路由器存在质量问题
  3. 【 MATLAB 】filter 函数介绍 之 Filter Data in Sections
  4. .net中语音识别和语音合成(二)语音合成提高篇
  5. 递归算法小结(数的阶乘、斐波那契和汉诺塔问题)
  6. mysql全局唯一id_Mysql实现全局唯一ID
  7. 详细关闭iiop方法_疏通暖气片堵塞的方法,看完你就知道了!
  8. 百兆以太网口通信速率_以太网 数据包速率计算方法
  9. 堂堂小米手表竟比不上小天才电话手表?不支持视频和拍照...
  10. Swift 反射 API 及用法
  11. World of Warcraft .M2模型重建
  12. Android 5.1 Gallery2 模块编译不过解决办法
  13. 学校新机房装系统——联想机房网络同传
  14. 【人工智能项目】LSTM实现数据预测分类实验
  15. 关于SAPI的两段小代码(c++)
  16. 计算机原理探险系列(一)CPU
  17. python3数据可视化软件_Python数据可视化工具Plotly
  18. 联网技术架构讨论:Facebook 如何管理150亿张照片
  19. mac safari无法打开网页_苹果手机浏览器打不开网页怎么办?Safari无法打开网页的解决方法...
  20. 全球及中国足病鞋垫行业销售情况及营销渠道策略报告(2022-2027年)

热门文章

  1. 基于栅格成本的空间路径分析
  2. 数据库关系模型完整性约束
  3. 卫星地图Google中国 可能是一项“要命的创新”
  4. 单链表指针和头结点的理解
  5. 【内网学习笔记】18、LLMNR 和 NetBIOS 欺骗攻击
  6. 最全的入门web安全渗透路线
  7. 如何成为抖音带货达人?抖音带货6点必备技巧
  8. ubuntu系统查看gcc版本及版本切换
  9. Smart Fuzzing智能模糊测试
  10. 全球与中国超声设备市场深度研究分析报告