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吗?
Feb 24 Javascript
查询绑定数据岛的表格中的文本并修改显示方式的js代码
Dec 15 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(一)让静态人物动起来
Jan 23 Javascript
JavaScript将取代AppleScript?
Sep 18 Javascript
JavaScript fontcolor方法入门实例(按照指定的颜色来显示字符串)
Oct 17 Javascript
jQuery实现的瀑布流加载效果示例
Sep 13 Javascript
jQuery EasyUI 右键菜单--关闭标签/选项卡的简单实例
Oct 10 Javascript
iscroll.js滚动加载实例详解
Jul 18 Javascript
详谈vue+webpack解决css引用图片打包后找不到资源文件的问题
Mar 06 Javascript
用Node编写RESTful API接口的示例代码
Jul 04 Javascript
微信小程序开发问题之wx.previewImage
Dec 25 Javascript
VUE的history模式下除了index外其他路由404报错解决办法
Aug 21 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 Session变量不能传送到下一页的解决方法
2009/11/27 PHP
ThinkPHP3.1新特性之动态设置自动完成及自动验证示例代码
2014/06/23 PHP
Yii框架组件的事件机制原理与用法分析
2020/04/07 PHP
jQuery使用手册之 事件处理
2007/03/24 Javascript
用dom+xhtml+css制作的一个相册效果代码打包下载
2008/01/24 Javascript
innerHTML 和 getElementsByName 在IE下面的bug 的解决
2010/04/09 Javascript
jquery.validate分组验证代码
2011/03/17 Javascript
js判断是否为数组的函数: isArray()
2011/10/30 Javascript
如何使用jQuery Draggable和Droppable实现拖拽功能
2013/07/05 Javascript
jqueryUI里拖拽排序示例分析
2015/02/26 Javascript
angularjs学习笔记之完整的项目结构
2015/09/26 Javascript
jQuery实现放大镜效果实例代码
2016/03/17 Javascript
Summernote实现图片上传功能的简单方法
2016/07/11 Javascript
js中class的点击事件没有效果的解决方法
2016/10/13 Javascript
Vue利用History记录上一页面的数据方法实例
2018/11/02 Javascript
vue组件传值的实现方式小结【三种方式】
2020/02/05 Javascript
浅析 Vue 3.0 的组装式 API(一)
2020/08/31 Javascript
35个Python编程小技巧
2014/04/01 Python
python 巧用正则寻找字符串中的特定字符的位置方法
2018/05/02 Python
如何用Python来搭建一个简单的推荐系统
2019/08/07 Python
pandas中遍历dataframe的每一个元素的实现
2019/10/23 Python
使用python 将图片复制到系统剪贴中
2019/12/13 Python
将自己的数据集制作成TFRecord格式教程
2020/02/17 Python
python简单利用字典破解zip文件口令
2020/09/07 Python
selenium与xpath之获取指定位置的元素的实现
2021/01/26 Python
python实现不同数据库间数据同步功能
2021/02/25 Python
pip install命令安装扩展库整理
2021/03/02 Python
广州喜创信息技术有限公司JAVA软件工程师笔试题
2012/10/17 面试题
计算机开发个人求职信范文
2013/09/26 职场文书
社区公民道德宣传日活动总结
2015/03/23 职场文书
客服专员岗位职责范本
2015/04/07 职场文书
酒店财务部岗位职责
2015/04/14 职场文书
2015社区精神文明建设工作总结
2015/04/21 职场文书
读《方与圆》有感:交友方圆有度
2020/01/14 职场文书
完美处理python与anaconda环境变量的冲突问题
2021/04/07 Python
python利用pandas分析学生期末成绩实例代码
2021/07/09 Python