封装webpack插件demo,去除bundle.js的注释内容

const { Compilation } = require('webpack');

class MyPlugin {
	// apply是webpack官方规定的具名钩子
	// compiler.hooks 是webpack透出的很多hooks 可自行查看webpack官网对hooks的解释说明
	apply(compiler) {		
		// = =,当时的情况是这样的,我打不开中文版,所以给个官网的英文解释吧!!!
		// thisCompilation:Executed while initializing the compilation, right before emitting the compilation event. This hook is not copied to child compilers.
		compiler.hooks.thisCompilation.tap('MyPlugin', (compilation) => {
			// compilation => 打包的上下文
			compilation.hooks.processAssets.tap({
				name: 'MyPlugin',
				stage: Compilation.PROCESS_ASSETS_STAGE_ADDITIONS, // see below for more stages,
			},
			(assets) => {
				console.log('List of assets and their sizes:');
				Object.entries(assets).forEach(([pathname, source]) => {
					console.log(`${pathname}: ${source.size()} bytes`);
					if (pathname.endsWith('.js')) {
						const withoutComments = source
							.source()
							.replace(/\/\*\*+\*\//g, ''); // 将打包的js文件中注释去掉
						// 处理打包的对应文件后将新的内容透出
						compilation.assets[pathname] = {
							source: () => withoutComments, // *文件资源
							size: () => withoutComments.length, // *文件大小
						};
						}
					});
			})
		})
	}
}

// 第二种方案 这个打包webpack会报warning,提示使用上面的方案
class MyPlugin {
	// apply是webpack官方规定的具名钩子
	// compiler.hooks 是webpack透出的很多hooks 可自行查看webpack官网对hooks的解释说明
	apply(compiler) {		
		// = =,当时的情况是这样的,我打不开中文版,所以给个官网的英文解释吧!!!
		// emit:Executed right before emitting assets to output dir. This hook is not copied to child compilers.
		compiler.hooks.emit.tap('MyPlugin', (compilation) => {
			// compilation => 打包的上下文
			for (let name in compilation.assets) {
				// console.log(name); // 文件名
				// console.log(compilation.assets[name].source()); // 文件资源
				if (name.endsWith('.js')) {
					const contents = compilation.assets[name].source();
					const withoutComments = contents.replace(/\/\*\*+\*\//g, '');
					compilation.assets[name] = {
						source: () => withoutComments,
						size: () => withoutComments.length,
					};
				}
			}
		}
	}
}

// 在webpack plugins中配置
plugins: [
	new MyPlugin(),
]
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值