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 相关文章推荐
[原创]IE view-source 无法查看看源码 JavaScript看网页源码
Jul 19 Javascript
基于jquery实现点击左右按钮图片横向滚动
Apr 11 Javascript
ext combobox动态加载数据库数据(附前后台)
Jun 17 Javascript
原生javascript实现隔行换色
Jan 04 Javascript
JavaScript实现的简单拖拽效果
Jun 01 Javascript
js表单中选择框值的获取及表单的序列化
Dec 17 Javascript
javascript 常用验证函数总结
Jun 28 Javascript
IOS中safari下的select下拉菜单文字过长不换行的解决方法
Sep 26 Javascript
jQuery实现圣诞节礼物动画案例解析
Dec 25 Javascript
yarn的使用与升级Node.js的方法详解
Jun 04 Javascript
vue-cli如何引入bootstrap工具的方法
Oct 19 Javascript
jquery获取并修改触发事件的DOM元素示例【基于target 属性】
Oct 10 jQuery
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下读取文本文件的代码
2008/07/02 PHP
ThinkPHP写第一个模块应用
2012/02/20 PHP
PHP图像处理类库MagickWand用法实例分析
2015/05/21 PHP
PHP读取目录树的实现方法分析
2019/03/22 PHP
JS 自动安装exe程序
2008/11/30 Javascript
javascript getElementsByName()的用法说明
2009/07/31 Javascript
基于jquery的用鼠标画出可移动的div
2012/09/06 Javascript
window.requestAnimationFrame是什么意思,怎么用
2013/01/13 Javascript
详解javascript遍历方式
2015/11/11 Javascript
JQuery实现简单的服务器轮询效果实例
2016/03/31 Javascript
JS中传递参数的几种不同方法比较
2017/01/20 Javascript
Vue中fragment.js使用方法详解
2017/03/09 Javascript
JavaScript使用链式方法封装jQuery中CSS()方法示例
2017/04/07 jQuery
200行HTML+JavaScript实现年会抽奖程序
2019/01/22 Javascript
Vue 之孙组件向爷组件通信的实现
2019/04/23 Javascript
微信小程序 组件的外部样式externalClasses使用详解
2019/09/06 Javascript
记一次react前端项目打包优化的方法
2020/03/30 Javascript
利用Python中的mock库对Python代码进行模拟测试
2015/04/16 Python
python简单判断序列是否为空的方法
2015/06/30 Python
Python操作RabbitMQ服务器实现消息队列的路由功能
2016/06/29 Python
python下读取公私钥做加解密实例详解
2017/03/29 Python
python脚本开机自启的实现方法
2019/06/28 Python
PyQt5实现暗黑风格的计时器
2019/07/29 Python
Python SELENIUM上传文件或图片实现过程
2019/10/28 Python
攀岩、滑雪、徒步旅行装备:Black Diamond Equipment
2019/08/16 全球购物
高校学生干部的自我评价分享
2013/11/04 职场文书
物流专业毕业生推荐信范文
2013/11/18 职场文书
犯错检讨书
2014/02/21 职场文书
《雪地里的小画家》教学反思
2014/02/22 职场文书
春季防火方案
2014/05/10 职场文书
2014年教师学期工作总结
2014/11/08 职场文书
爱国主义教育基地观后感
2015/06/18 职场文书
护理工作心得体会
2016/01/22 职场文书
导游词之无锡梅园
2019/11/28 职场文书
CSS3 制作的图片滚动效果
2021/04/14 HTML / CSS
教你怎么用python实现字符串转日期
2021/05/24 Python