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 相关文章推荐
JS实现打开本地文件或文件夹
Mar 09 Javascript
Javascript客户端将指定区域导出到Word、Excel的代码
Oct 22 Javascript
jquery foreach使用示例
Sep 12 Javascript
使用javascript为网页增加夜间模式
Jan 26 Javascript
Agularjs妙用双向数据绑定实现手风琴效果
May 26 Javascript
Node.js readline 逐行读取、写入文件内容的示例
Mar 01 Javascript
javascript实现文件拖拽事件
Mar 29 Javascript
微信小程序使用component自定义toast弹窗效果
Nov 27 Javascript
详解JavaScript 新语法之Class 的私有属性与私有方法
Apr 23 Javascript
实用的Vue开发技巧
May 30 Javascript
JavaScript实现留言板案例
Mar 17 Javascript
vue内置组件component--通过is属性动态渲染组件操作
Jul 28 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动态页生成静态页的3种常用方法
2014/11/13 PHP
PHP+jQuery翻板抽奖功能实现
2015/10/19 PHP
php实现分页显示
2015/11/03 PHP
一个简单的js动画效果代码
2010/07/20 Javascript
js实现网页自动刷新可制作节日倒计时效果
2014/05/27 Javascript
js触发select onchange事件的小技巧
2014/08/05 Javascript
javascript检测是否联网的实现代码
2014/09/28 Javascript
前端必备神器 Snap.svg 弹动效果
2014/11/10 Javascript
jQuery制作简单柱状图实例
2015/01/28 Javascript
了解Javascript的模块化开发
2015/03/02 Javascript
jquery实现点击向下展开菜单项(伸缩导航)效果
2015/08/22 Javascript
原生JS实现美图瀑布流布局赏析
2015/09/07 Javascript
js实现有过渡渐变效果的图片轮播相册(兼容IE,ff)
2016/01/19 Javascript
js格式化输入框内金额、银行卡号
2016/02/01 Javascript
Vue.js通用应用框架-Nuxt.js的上手教程
2017/12/25 Javascript
Node批量爬取头条视频并保存方法
2018/09/20 Javascript
Vue插件从封装到发布的完整步骤记录
2019/02/28 Javascript
axios解决高并发的方法:axios.all()与axios.spread()的操作
2020/11/09 Javascript
python3学生名片管理v2.0版
2018/11/29 Python
PyCharm设置每行最大长度限制的方法
2019/01/16 Python
Ubuntu16.04安装python3.6.5步骤详解
2020/01/10 Python
如何基于pythonnet调用halcon脚本
2020/01/20 Python
详解如何解决H5开发使用wx.hideMenuItems无效果不生效
2021/01/20 HTML / CSS
科沃斯机器人官网商城:Ecovacs
2016/08/29 全球购物
NUK奶瓶美国官网:NUK美国
2016/09/26 全球购物
英国精品买手店:Browns Fashion
2016/09/29 全球购物
方太官方网上商城:销售方太抽油烟机、燃气灶、消毒柜等
2017/01/17 全球购物
澳大利亚相机之家:Camera House
2017/11/30 全球购物
中介业务员岗位职责
2014/04/09 职场文书
幼儿园优秀班主任事迹材料
2014/05/14 职场文书
我们的节日元宵活动方案
2014/08/23 职场文书
领导干部群众路线教育实践活动剖析材料
2014/10/10 职场文书
铁人纪念馆观后感
2015/06/16 职场文书
爱的教育观后感
2015/06/17 职场文书
mysql 8.0.24 安装配置方法图文教程
2021/05/12 MySQL
JavaScript中的LHS和RHS分析详情
2022/04/06 Javascript