编写插件
基础插件
编写示例
class BasicPlugin {
// 从构造函数中获取用户设置的配置
constructor (options) {
}
// Webpack 会调用 BasicPlugin 实例的 apply 方法给插件实例传入 compiler 对象
apply (compiler) {
compiler.hooks.compilation.tap('BasicPlugin', compilation => {
})
}
}
// 导出 Plugin
module.exports = BasicPlugin使用示例
Compiler 和 Compilation
Compiler
Compiler 对象包含了 Webpack 环境所有的的配置信息,包含 options,loaders,plugins 这些信息,这个对象在 Webpack 启动时候被实例化,它是全局唯一的,可以简单地把它理解为 Webpack 实例
Compilation
Compilation 对象包含了当前的模块资源、编译生成资源、变化的文件等。当 Webpack 以开发模式运行时,每当检测到一个文件变化,一次新的 Compilation 将被创建。Compilation 对象也提供了很多事件回调供插件做扩展。通过 Compilation 也能读取到 Compiler 对象
区别
Compiler 代表了整个 Webpack 从启动到关闭的生命周期,而 Compilation 只是代表了一次新的编译
事件流
开发插件时注意事项
只要能拿到 Compiler 或 Compilation 对象,就能广播出新的事件,所以在新开发的插件中也能广播出事件,给其它插件监听使用
传给每个插件的 Compiler 和 Compilation 对象都是同一个引用。也就是说在一个插件中修改了 Compiler 或 Compilation 对象上的属性,会影响到后面的插件
有些事件是异步的,这些异步的事件会附带两个参数,第二个参数为回调函数,在插件处理完任务时需要调用回调函数通知 Webpack,才会进入下一处理流程(v3.8.1)
常用 API
读取输出资源、代码块、模块及其依赖
chunk 字段
module 字段
监听文件变化
修改输出资源
判断 Webpack 使用了哪些插件
Last updated
Was this helpful?