對象 | 鉤子 |
---|---|
Compiler | run,compile,compilation,make,emit,done |
Compilation | buildModule,normalModuleLoader,succeedModule,finishModules,seal,optimize,after-seal |
Module Factory | beforeResolver,afterResolver,module,parser |
Module | |
Parser | program,statement,call,expression |
Template | hash,bootstrap,localVars,render |
是每一個插件必備的方法,webpack會在run的時候經過apply注入webpack實例,webpack還提供許多鉤子函數,分別對應webpack執行的不一樣階段,你能夠在apply利用compiler爲webpack註冊事件webpack
minify-annotation-plugin.jsweb
去除文件中 /.../ 的註釋express
module.exports = class MinifyAnnotationPlugin {
constructor(options) {
this.options = options;
this.externalModules = {};
}
apply(compiler) {
var reg = /\/(\*)+.*(\*)+\//g; // 註釋正則
compiler.hooks.emit.tap("MinifyAnnotation", compilation => { // 註冊emit事件
// compilation對應全部編譯的文件
Object.keys(compilation.assets).forEach(filename => {
let content = compilation.assets[filename].source();
content = content.replace(reg, ""); // 替換掉註釋
// 返回新的內容
compilation.assets[filename] = {
source() {
return content;
},
size() {
return content.length;
}
};
});
});
}
};
複製代碼