使用 插件实现过去除打包后的js文件中的注释
插件是一个带有 apply 方法的 class。
- 在 自定义的 插件 js 文件中,module.exports 一个 class,因为插件使用的时候要被 new
- class 含有一个 apply 方法
- 这个方法 接受一个 compiler 参数对象【compiler 对象中有各种钩子,在webpack 运行阶段被触发,实现这些钩子的核心是 tapable】
- 在 compiler 对象上 插入指定的 钩子
- 在钩子的回调函数中,拿到 compilation 对象
- 通过这个 对象可以拿到打包后的文件信息,比如 assets、modules、chunks 的信息
- 插件在 constructor 中可以接受参数
// 实现一个 删除 打包后的 js 文件中的 注释
class removeComments {
constructor(params) {
// 通过 params 可以拿到参数
console.log('参数', params);
}
apply(compiler) {
compiler.hooks.emit.tap('removeComments', compilation => {
for (let fileName in compilation.assets) {
if (fileName && fileName.endsWith('.js')) {
// 获取源文件
const source = compilation.assets[fileName].source();
const withoutComments = source.replace(/\/\*+\*\//g, '')
/******/
compilation.assets[fileName] = {
source: () => withoutComments,
size: () => withoutComments.length
}
}
}
})
}
}
module.exports = removeComments;
// 使用
const RemoveComments = require('./src/plugins/removeComments')