参考:https://juejin.cn/post/6888936770692448270#heading-8
什么是plugin?
plugin是在打包过程中某些具体时刻上做一些操作的工具。目的在于解决 loader 无法实现的其他事,它直接作用于 webpack,扩展了它的功能。
例如:
- html-webpack-plugin -> 在打包之后自动生成一个html文件
- clean-webpack-plugin -> 在打包之前清空dist目录
插件是一个类(loader是一个function)
class CopyrightWebpackPlugin {
// new时候执行构造函数
constructor(options) {
console.log('插件被使用了')
}
// compiler是一个webpack实例
apply(compiler) {
// 异步钩子
compiler.hooks.emit.tapAsync('CopyrightWebpackPlugin', (compilation, cb) => {
compilation.assets['copyright.txt'] = {
source: function() {
return 'copyright by tuziqi'
}
}
cb()
})
// 同步钩子
compiler.hooks.compile.tap('CopyrightWebpackPlugin', (compilation) => {
})
}
}
module.exports = CopyrightWebpackPlugin
compiler.hooks包含webpack在打包过程中生命周期的一些钩子函数
这些钩子有同步的和异步的,同步的使用tap方法,异步的用tapAsync方法需要多传一个cb参数,在异步操作的最后需要执行cb函数。