文章目录

  • 文章参考
  • 什么是HappyPack? 作用是什么?
    • HappyPack的基本原理?
  • 使用案例
    • 安装依赖库
    • webpack.config.js 配置如何使用 happypack
      • 配置说明
  • webpack配置问题:HappyPack: plugin for the loader '1' could not be found?

文章参考

  1. roadhog 构建优化
  2. 深入浅出的webpack构建工具—HappyPack优化构建(九)

什么是HappyPack? 作用是什么?

  1. Webpack是允许在NodeJS中的,它是单线程模型的,因此webpack在构建文件时,比如js,css,图片及字体时,它需要一个一个去解析和编译,不能同时处理多个任务。
  2. 特别当文件数量变多后,webpack构建慢的问题会显得更为严重。
  3. 因此HappyPack出现了,它能让webpack同时处理多个任务,它将任务分解给多个子进程去并发执行,子进程处理完成后再将结果发送给主进程中。

HappyPack的基本原理?

在webpack构建过程中,我们需要使用Loader对js,css,图片,字体等文件做转换操作,并且转换的文件数据量也是非常大的,且这些转换操作不能并发处理文件,而是需要一个个文件进行处理,HappyPack的基本原理是将这部分任务分解到多个子进程中去并行处理,子进程处理完成后把结果发送到主进程中,从而减少总的构建时间。

使用案例

安装依赖库

cnpm i -D happypack

webpack.config.js 配置如何使用 happypack

  1. 在plugin中配置happypack实例
  2. 在loader中使用 happypack 创建的进程

// 引入HappyPack插件
const HappyPack = require('happypack');
const os = require('os');
const happyThreadPool = HappyPack.ThreadPool({size: os.cpus().length});
console.log("happyThreadPool:" + happyThreadPool)// 构造出共享进程池,在进程池中包含 5 个子进程
// const happyThreadPool = HappyPack.ThreadPool({ size : 5 }) ;module.exports = {mode: "development",// mode: "production",entry: {main: "./main.js"// lodash: './src/template/lodash.js'},output: {path: path.resolve(__dirname, "dist"),filename: "main.js"},resolve: {// 定义路径别名alias: {"@": path.resolve(__dirname, "./"),// @src 代表 “工程目录/src”"@src": path.resolve(__dirname, "./src"),// @component 代表 “工程目录/src/components”"@component": path.resolve(__dirname, "./src/components")},// 指定第三方模块加载的路径,例如 jquery 、lodash等modules: ["node_modules", "./lib/components"],// 如果引入的文件没有后缀名,默认会优先去找 js文件,如果没有就去找 ts文件,如果没有就找json文件,依次类推,默认是 jsextensions: [".js", ".ts", ".json"]},module: {rules: [{test: /\.js$/,// 排除 node_modules 和 bower_components 下的文件exclude: /(node_modules|bower_components)/,use: {// loader: "babel-loader",loader: 'happypack/loader?id=babel',// options: {//   presets: [//     [//       "@babel/preset-env",//       {//         // 只引用使用了新特性 polyfill//         // useBuiltIns: 'usage'//       }//     ]//   ]// }}},{test: /\.(eot|svg|ttf|woff|woff2)(\?\S*)?$/,use: {loader: "file-loader",options: {esModule: false, // 这里设置为falseoutputPath: "fonts/", // 指定字体输入的文件夹,打包地址是 “/dist/fonts/字体文件”publicPath: "/fonts" // 指定字体的路径,即打包结果引入的地址是 "/fonts/字体文件名"}}},{test: /\.(png|jpg|gif)$/,use: [{loader: 'happypack/loader?id=image',// loader: "url-loader",// options: {//   esModule: false, // 这里设置为false//   outputPath: "images/", // 指定图片输入的文件夹, 打包地址是 “/dist/images/图片名字”//   publicPath: "/images", // 指定获取图片的路径,即打包结果引入的地址是 "/images/图片名字"//   // limit  (如果小于 8192字节 ,则转为base64,否则返回一个url地址)//   limit: 8192,//   name: "[name].[hash:8].[ext]" // 输入的图片名// }}]},{test: /\.(scss|css)$/,/*** loader 是从又向做执行* 1. 最先执行 sass-loader ,将 sass 文件转为css* 2. css-loader 将转换后的css文件转为 js模块* 3. style-loader 将 css 插入到HTML中的<style>标签中*/use: [devMode? {loader: "style-loader" // 将 JS 字符串生成为 style 节点}: MiniCssExtractPlugin.loader,{// loader: "css-loader" // 将 CSS 转化成 CommonJS 模块loader: 'happypack/loader?id=css-pack' // 将 CSS 转化成 CommonJS 模块},{loader: "sass-loader" // 将 Sass 编译成 CSS}]// 等价于// use: ["style-loader", "css-loader", "sass-loader"]}]},plugins: [new CleanWebpackPlugin(), //删除上次打包文件,默认目录'./dist'/****   使用HappyPack实例化    *****/new HappyPack({// 用唯一的标识符id来代表当前的HappyPack 处理一类特定的文件id: 'babel',// 使用共享进程池中的子进程去处理任务。// threadPool: happyThreadPool,// 如何处理.js文件,用法和Loader配置是一样的loaders: [{loader: 'babel-loader',options: {presets: [["@babel/preset-env",{// 只引用使用了新特性 polyfill// useBuiltIns: 'usage'}]]}}]}),new HappyPack({id: 'image',// threadPool: happyThreadPool,loaders: [{loader: 'url-loader',options: {esModule: false, // 这里设置为falseoutputPath: "images/", // 指定图片输入的文件夹, 打包地址是 “/dist/images/图片名字”publicPath: "/images", // 指定获取图片的路径,即打包结果引入的地址是 "/images/图片名字"// limit  (如果小于 8192字节 ,则转为base64,否则返回一个url地址)limit: 8192,name: "[name].[hash:8].[ext]" // 输入的图片名}}]}),// 处理css文件new HappyPack({id: 'css-pack',// threadPool: happyThreadPool,loaders: [{loader: 'css-loader'}]})],};

配置说明

  1. happypack/loader?id=xx 紧跟的id=xxx,就是告诉happy-loader选择哪个happyPack的实列处理文件。
  2. 在plugin插件配置中新增了HappyPack的实列,作用是告诉HappyPack如何处理该文件

webpack配置问题:HappyPack: plugin for the loader ‘1’ could not be found?

用了 happypack 之后,不能在 rules 里面的相关 loader 中配置 options,相反只能在 happypack 插件中配置 options!

webpack HappyPack多个进程处理loader相关推荐

  1. webpack源码分析之三:loader

    前言 在webpack特性里面,它可以支持将非javaScript文件打包,但前面写到webpack的模块化打包只能应用于含有特定规范的JavaScript文件.本次介绍的loader则是用来解决这类 ...

  2. Webpack4 HappyPack增加编译进程数

    1.HappyPack 在用Webpack构建项目时有大量文件需要解析和处理,构建过程是文件读写和计算密集型的操作(特别是当文件数量变多后),Webpack 构建慢的问题会显得严重. 运行在 Node ...

  3. webpack实战之手写一个loader和plugin

    webpack实战之编写一个简易的loader和plugin

  4. webpack打包样式资源_使用loader去打包css文件_打包less文件---webpack工作笔记004

    然后我们再来看看,怎么用webpack打包css资源文件, 因为我们知道webpack可以直接处理js,json文件,但是不能直接处理css文件,img文件对吧.. 我们现在,通过webpack的组件 ...

  5. Webpack升级优化小记:happyPack+dll初体验

    最近学习了webpack4的使用,并尝试了对项目webpack进行升级和优化,记录一下此次升级的一些实践过程. 痛苦的开发体验 漫长的等待 项目在2016年引入了webpack作为打包工具,并使用vu ...

  6. Loader 入门【Webpack Book 翻译】

    原文链接:https://survivejs.com/webpack... 翻译计划:https://segmentfault.com/a/11... 附言:因为发现书中一些内容单独放出来会比较尴尬, ...

  7. webpack loader的套路

    学习webpack loader,最后模拟style-loader.less-loader 什么是loader loader是一个函数,用来把文件转换成webpack识别的模块. loader API ...

  8. webpack的loader与plugin原理

    文章目录 loader原理 loader执行顺序 loader使用方式 loader的实现 参数 同步loader 异步loader Raw loader Pitching loader loader ...

  9. vue-cli Webpack之Loader原理及自定义Loader

    文章目录 1. Loader 分类与执行顺序 1.1 Loader 分类 1.2 Loader 执行顺序 1.3 使用Loader方式 1.3.1 内联 Loader 2. 开发 Loader 步骤 ...

最新文章

  1. mysql删除重复记录
  2. 控制html页面在浏览器显示比例,判断浏览器缩放比例的方法_html/css_WEB-ITnose
  3. 轻量高效!清华智能计算实验室开源基于PyTorch的视频 (图片) 去模糊框架SimDeblur
  4. 2:IDEA生成springboot项目,修改启动图标和网页端口
  5. 选择最好用的PyCharm IDE
  6. qt找不到打印机_Qt无法调起打印机问题(QPrintDialog: Cannot be used on non-native printers)解决...
  7. 机器学习中的交叉验证
  8. 单变量和多变量财务预警模型_SPSS数据分析,基于判别分析上市公司财务危机预警分析...
  9. 如何修改服务器上的端口号,如何修改远程服务器端口号
  10. 2019医学电子书下载PDF电子版下载
  11. 企业数据防泄露 | 如何保护您的数据资产?
  12. Python中pandas.Dataframe数据筛选
  13. cc共享许可协议_如何以及为何使用知识共享许可的作品
  14. Activiti6 流程模型图中文显示为方块□□
  15. 《自拍教程44》Python adb一键截取Logcat日志
  16. Echache整合Spring缓存实例讲解(转)
  17. java中间件技术有哪些?
  18. android 加载gif 动画,GifView——Android显示GIF动画
  19. 解决win10资源管理器关后电脑黑屏问题
  20. 计算机科学报数学竞赛,(word)首届全校数学竞赛.doc

热门文章

  1. 王歌@心灵成长大学——在线教育平台正式开通
  2. 计算机 中的位、字节和字
  3. 物联网固件逆向分析记录(初步概念记录)
  4. php curl 模拟post提交
  5. UVM环境中reset复位的处理
  6. 聚焦2023北京安博会,超高清安防应用将成潮流
  7. 《大数据分析原理与实践》一一1.2 哪里有大数据
  8. Tcpcopy - 安装记录
  9. C语言链表-创建链表并且从键盘输入赋值
  10. 华为鸿蒙汽车自动驾驶,华为鸿蒙车机OS现身,自动驾驶再进化