webpack的pitching loader详解


Posted in Javascript onSeptember 23, 2019

webpack中关于pitching loader的文档比较不清楚:

The loaders are called from right to left. But in some cases loaders do not care about the results of the previous loader or the resource. They only care for metadata. The pitch method on the loaders is called from left to right before the loaders are called. If a loader delivers a result in the pitch method the process turns around and skips the remaining loaders, continuing with the calls to the more left loaders. data can be passed between pitch and normal call.

比如a!b!c!module, 正常调用顺序应该是c、b、a,但是真正调用顺序是
a(pitch)、b(pitch)、c(pitch)、c、b、a, 如果其中任何一个pitching loader返回了值就相当于在它以及它右边的loader已经执行完毕。

比如如果b返回了字符串"result b", 接下来只有a会被系统执行,且a的loader收到的参数是result b。

也就是说pitching loader的初衷是为了提升效率,少执行几个loader。

然而这样的机会并不多。更为常用的是它的另一个用途。

根据官方文档:

In the complex case, when multiple loaders are chained, only the last loader gets the resource file and only the first loader is expected to give back one or two values (JavaScript and SourceMap). Values that any other loader give back are passed to the previous loader.

loader根据返回值可以分为两种,一种是返回js代码(一个module的代码,含有类似module.export语句)的loader,还有不能作为最左边loader的其他loader

问题是有时候我们想把两个第一种loader chain起来,比如style-loader!css-loader!

问题是css-loader的返回值是一串js代码,如果按正常方式写style-loader的参数就是一串代码字符串。就算eval了也不一定拿到什么值

eval('module.export="result";console.log("hello world")') === "hello world"

为了解决这种问题,我们需要在style-loader里执行require(css-loader!resouce), 这会把css-loader跑一遍,也就是说如果按正常顺序执行css-loader会跑两遍(第一遍拿到的js代码用不了), 为了只执行一次,style-loader利用了pitching, 在pitching函数里require(css-loader!resouce)。然后返回js代码(style-loader能够作为最左边loader)

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

Javascript 相关文章推荐
javascript的对话框详解与参数
Mar 08 Javascript
基于jquery.Jcrop的头像编辑器
Mar 01 Javascript
jQuery插件原来如此简单 jQuery插件的机制及实战
Feb 07 Javascript
jQuery中将函数赋值给变量的调用方法
Mar 23 Javascript
文本有关的样式和jQuery求对象的高宽问题分别说明
Aug 30 Javascript
HTML中setCapture、releaseCapture 使用方法浅析
Sep 25 Javascript
快速掌握jQuery插件WebUploader文件上传
Nov 07 Javascript
vue中SPA单页面应用程序详解
Nov 07 Javascript
解决webpack+Vue引入iView找不到字体文件的问题
Sep 28 Javascript
vue--vuex详解
Apr 15 Javascript
uni-app使用微信小程序云函数的步骤示例
May 22 Javascript
使用Vant完成Dialog弹框案例
Nov 11 Javascript
layui 富文本图片上传接口与普通按钮 文件上传接口的例子
Sep 23 #Javascript
深入探索VueJS Scoped CSS 实现原理
Sep 23 #Javascript
小程序实现锚点滑动效果
Sep 23 #Javascript
React Native 混合开发多入口加载方式详解
Sep 23 #Javascript
Node.js HTTP服务器中的文件、图片上传的方法
Sep 23 #Javascript
node 文件上传接口的转发的实现
Sep 23 #Javascript
layui 上传文件_批量导入数据UI的方法
Sep 23 #Javascript
You might like
PHP mb_convert_encoding 获取字符串编码类型实现代码
2009/04/26 PHP
php小偷相关截取函数备忘
2010/11/28 PHP
使用php统计字符串中中英文字符的个数
2013/06/23 PHP
ThinkPHP3.1新特性之多层MVC的支持
2014/06/19 PHP
php中Session的生成机制、回收机制和存储机制探究
2014/08/19 PHP
PHP基于新浪IP库获取IP详细地址的方法
2017/05/04 PHP
php中字符串和整数比较的操作方法
2019/06/06 PHP
大家未必知道的Js技巧收藏
2008/04/07 Javascript
jquery1.5.1中根据元素ID获取元素对象的代码
2011/04/02 Javascript
微信中一些常用的js方法汇总
2015/03/12 Javascript
JavaScript中指定函数名称的相关方法
2015/06/04 Javascript
关于不同页面之间实现参数传递的几种方式讨论
2017/02/13 Javascript
Angular.Js中过滤器filter与自定义过滤器filter实例详解
2017/05/08 Javascript
浅谈JsonObject中的key-value数据解析排序问题
2017/12/06 Javascript
微信小程序url传参写变量的方法
2018/08/09 Javascript
微信小程序按钮点击动画效果的实现
2019/09/04 Javascript
Vue v-bind动态绑定class实例方法
2020/01/15 Javascript
在vue中使用jsonp进行跨域请求接口操作
2020/10/29 Javascript
python 从远程服务器下载日志文件的程序
2013/02/10 Python
python调用新浪微博API项目实践
2014/07/28 Python
python实现将文本转换成语音的方法
2015/05/28 Python
Linux下将Python的Django项目部署到Apache服务器
2015/12/24 Python
python实现装饰器、描述符
2018/02/28 Python
python基础教程项目五之虚拟茶话会
2018/04/02 Python
python中map的基本用法示例
2018/09/10 Python
Python 函数用法简单示例【定义、参数、返回值、函数嵌套】
2019/09/20 Python
Python语言异常处理测试过程解析
2020/01/08 Python
英国人最爱的饰品网站:Accessorize
2016/08/22 全球购物
HearthSong官网:儿童户外玩具、儿童益智玩具
2017/10/16 全球购物
Michael Kors加拿大官网:购买设计师手袋、手表、鞋子、服装等
2019/03/16 全球购物
eBay爱尔兰站:eBay.ie
2019/08/09 全球购物
费用会计岗位职责
2014/01/01 职场文书
活动总结怎么写
2014/04/28 职场文书
教师党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
女方家长婚礼答谢词
2015/09/29 职场文书
2019大学竞选班长发言稿
2019/06/27 职场文书