参考: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函数。
