webpack HappyPack实战详解

 更新时间:2019年10月08日 09:43:46   作者:大饭团CC  
这篇文章主要介绍了webpack HappyPack实战详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

由于运行在 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,
  })
 ]
}

  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 原理解析

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • js 判断一个元素是否在页面中存在

    js 判断一个元素是否在页面中存在

    js 判断一个元素是否存在此功能在项目中很实用,本人搜集整理了一些常用技巧,需要了解的朋友可以参考下
    2012-12-12
  • JavaScript trim 去除字符串空格的三种方法(附代码详解)

    JavaScript trim 去除字符串空格的三种方法(附代码详解)

    个人认为最好的方法.采用的是正则表达式,这是最核心的原理.因为空格有多种形式。
    2010-05-05
  • js表单验证实例讲解

    js表单验证实例讲解

    这篇文章主要为大家详细介绍了js表单验证,JavaScript 可用来在数据被送往服务器前对HTML 表单中的这些输入数据进行验证,感兴趣的小伙伴们可以参考一下
    2016-03-03
  • js图片上传前预览功能(兼容所有浏览器)

    js图片上传前预览功能(兼容所有浏览器)

    这篇文章主要为大家详细介绍了js图片上传前预览功能,兼容所有浏览器,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • JavaScript中Map遍历方法代码示例

    JavaScript中Map遍历方法代码示例

    这篇文章主要给大家介绍了关于JavaScript中Map遍历方法的相关资料,Map是一组键值对的结构,具有极快的查找速度,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-11-11
  • JS判断点是否在线段上的代码

    JS判断点是否在线段上的代码

    这篇文章主要介绍了JS判断点是否在线段上的相关资料,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2023-11-11
  • 微信小程序实现动态渲染Markdown示例详解

    微信小程序实现动态渲染Markdown示例详解

    这篇文章主要为大家介绍了微信小程序实现动态渲染Markdown示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • js 时间函数应用加、减、比较、格式转换的示例代码

    js 时间函数应用加、减、比较、格式转换的示例代码

    时间函数应用加、减、比较、格式转换等等,具体实现如下,感兴趣的朋友可以参考下,希望对大家有所帮助
    2013-08-08
  • 使用Chart.js图表库制作漂亮的响应式表单

    使用Chart.js图表库制作漂亮的响应式表单

    数据包围着我们。虽然搜索引擎和其他应用都对基于文本方式表示的数据偏爱有加,但人们发现可视化是更容易理解的一种方式。今年初,SitePoint 发表了 Aurelio 的文章《 Chart.js简介》。在深入研究 Chart.js 的功能后,本文将会讲解这篇简介的一些重点。
    2015-10-10
  • 利用JavaScript实现ISO周日历

    利用JavaScript实现ISO周日历

    周日历是日常生活中不常用到的历法系统,一般用于政府、商务的会计年度或者学校教学日历中。本文将利用JavaScript制作个简单的周日历,感兴趣的可尝试一下
    2022-07-07

最新评论