自定义 plugin

99 阅读1分钟

plugin 是通过在生命周期的钩子中挂载函数实现的!!!

2260.png

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!!

2261.png

  • 注册监听函数 complier.hooks.xxhook.tap('selfPluginName',(complicatin)=>{})

  • 定义回调函数,在回调函数中实现相关功能!!

        - 该回调函数自动接收一个参数 complication
        - complication 即为此次打包的上下文
        - 可以通过 complication.assets 来获得打包输出的各个文件组成的对象
        - 可以通过 for (const key in complication) 来遍历
        - 则可以通过 complication[key].source() 来获得各个文件中的内容
    

2264.png