Plugin
# Plugin
plugin 其实就是一个 带有 apply 方法的对象
module.exports = class MyPlygin {
apply(compiler){
// compilation
}
}
Web pack 会在初始化阶段生成编译对象 compiler ,整个编译过程只会生成一个 compiler(只有一次初始化)。
apply 函数 会在创建好 compiler 对象后运行。
后续的打包流程都是由另一个对象(compilation)负责(生成 chunk,合成资源)
可以通过在 apply 函数中注册事件来参与编译过程。具体格式:
compiler.hooks.事件名称.事件类型(name,function (compilation){
//
})
编译过程的干涉
通过 compiler 注册 beforeRun 在编译前添加一个钩子函数。
拿到 生成的 compilation ,然后注册 compilation 的事件来干涉编译过程。
module.exports = class MyPlugin{
apply(compiler){
compiler.hooks.beforeRun.tab('add-event',function (compilation){
// 注册 compilation 事件。
})
}
}
webpack 就是通过各种事件来干预打包的过程。