Webpack进阶|青训营笔记

53 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 15 天

上一篇文章认识了Webpack,了解了它的使用方法。而这篇文章将介绍Loader和插件。本篇文章的重点在于使用Loader、认识Loader :链式调用与其他特性、Loader编写、常见Loader、 插件定义解析、插件设计优势、Loader与插件的差异以及Webpack学习方法推荐。

Loader

引入

为了处理非标准JS资源,设计出资源翻译模块Loader用于将资源翻译为标准JS。

image.png

使用Loader

image.png

认识Loader

链式调用

  • less-loader :实现less => css的转换
  • css-loader :将CSS包装成类似module.exports = "${css}" 的内容,包装后 的内容符合JavaScript语法。
  • style-loader :将css模块包进require语句,并在运行时调用injectStyle等 函数将内容注入到页面的style 标签。

image.png

其他特性

image.png 特点:

  • 链式执行
  • 支持异步执行
  • 分normal、pitch 两种模式

如何编写Loader

image.png

常见Loader

站在使用角度,建议掌握这些常见Loader的功能、配置方法。 image.png

理解插件

插件概念以及产生的原因

很多知名工具,如:VS Code、Web Storm、Chrome、Firefox、Babel、Webpack、Rollup、Eslint、QD Vue、Redux、Quill、Axios等等,都设计了所谓"插件”架构。 设计插件是一个特别复杂的过程:

  • 新人需要了解整个流程细节, 上手成本高
  • 功能迭代成本高,牵一发动全身
  • 功能僵化,作为开源项目而言缺乏成长性
  • ...
  • 心智成本高=>可维护性低=>生命力弱
  • 插件架构精髓:对扩展开放,对修改封闭

image.png 甚至,Webpack本身的很多功能也是基于插件实现的。

插件的使用

插件能力非常强大,甚至能改变webpack输出结构。

image.png

image.png

首先:插件围绕钩子展开

image.png

钩子的作用重在:在编译的某个环节触发钩子,某种程度上可以理解为--事件。

钩子的核心信息

1.时机:编译过程的特定节点,Webpack会以钩子形式通知插件此刻正在发生什么事情

2.上下文:通过tapable提供的回调机制,以参数方式传递上下文信息

3.交互:在上下文参数对象中附带了很多存在side effect的交互接口,插件可以通过这些接口改变

image.png

image.png

三、总结

通过学习Loader和插件,我知道了Loader的作用与常用Loader 插件基本形态与作用。同时对 Webpack有了更深的了解,并且知道了搭建集成的方法,能够更好的搭建集成。同时我们需要注意Loader 出来的 qml 界面,在界面关闭时,一定要清空 Loader 资源。