plugin是通过在生命周期的钩子中挂载函数实现的!!!
plugin的本质是一个函数或者是一个包含 apply 方法的对象!!!所以我们通常以类的类型来定义自己的plugin
注意:
- 类中需要有
apply()方法
apply(complier) 方法会自动接收一个参数---
complier
complier模块是 webpack 的主要引擎,它通过 CLI 或者 Node API 传递的所有选项创建出一个 compilation 实例。 它扩展(extends)自Tapable类,用来注册和调用插件。 大多数面向用户的插件会首先在Compiler上注册。【即生命周期钩子函数,是由compiler暴露,可以通过compler.hooks.xxx来访问】!!
栗子: emit生命周期钩子
我们需要实现一个插件,用来清除打包生成的 js 文件中的注释!!
- 先分析适用的生命周期,因为是清除打包生成的 js 文件中的注释,所以就要在 js 文件生成and输出之间。那就是---
emit!!
-
注册监听函数
complier.hooks.xxhook.tap('selfPluginName',(complicatin)=>{}) -
定义回调函数,在回调函数中实现相关功能!!
- 该回调函数自动接收一个参数 complication - complication 即为此次打包的上下文 - 可以通过 complication.assets 来获得打包输出的各个文件组成的对象 - 可以通过 for (const key in complication) 来遍历 - 则可以通过 complication[key].source() 来获得各个文件中的内容