webpack的pitching loader详解

 更新时间:2019年09月23日 14:49:36   作者:此题无解灬  
这篇文章主要介绍了webpack的pitching loader详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

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)

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

相关文章

  • uniapp u-picker多列用法以及设置默认选中值

    uniapp u-picker多列用法以及设置默认选中值

    uview组件库u-picker组件可能很多人不熟悉,下面这篇文章主要给大家介绍了关于uniapp u-picker多列用法以及设置默认选中值的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-06-06
  • JS Loading功能的简单实现

    JS Loading功能的简单实现

    这篇文章主要介绍了JS Loading功能的简单实现。这个功能原理是很简单的,就是一个DIV遮盖当前页面,然后Loading就在遮盖DIV层上展示出来
    2013-11-11
  • TypeScript 中括号用法小结

    TypeScript 中括号用法小结

    本文主要介绍了TypeScript 中括号用法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • JavaScript中Object的常用方法总结

    JavaScript中Object的常用方法总结

    这篇文章主要为大家整理了7个JavaScript中Object的常用方法的使用,文中的示例代码讲解详细,对我们掌握JavaScript有一点的帮助,感兴趣的可以了解一下
    2023-02-02
  • 原生JS实现轮播图效果

    原生JS实现轮播图效果

    这篇文章主要为大家详细介绍了原生JS实现轮播图效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-10-10
  • 基于JS实现bookstore静态页面的实例代码

    基于JS实现bookstore静态页面的实例代码

    本文给大家分享一段核心代码基于js实现的bookstore静态页面,代码简单易懂,非常不错,具有参考借鉴价值,需要的朋友参考下
    2017-02-02
  • JavaScript实现经典贪吃蛇游戏

    JavaScript实现经典贪吃蛇游戏

    这篇文章主要为大家详细介绍了JavaScript实现经典贪吃蛇游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • layer页面跳转,获取html子节点元素的值方法

    layer页面跳转,获取html子节点元素的值方法

    今天小编就为大家分享一篇layer页面跳转,获取html子节点元素的值方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-09-09
  • JavaScript实现点击切换验证码及校验

    JavaScript实现点击切换验证码及校验

    这篇文章主要为大家详细介绍了JavaScript实现点击切换验证码及校验,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-01-01
  • 原生js FileReader对象实现图片上传本地预览效果

    原生js FileReader对象实现图片上传本地预览效果

    这篇文章主要介绍了原生js FileReader对象实现图片上传本地预览效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07

最新评论