26 lines
843 B
JavaScript
26 lines
843 B
JavaScript
const fs = require('fs');
|
|
const path = require('path');
|
|
|
|
class StripObjectCallPlugin {
|
|
apply(compiler) {
|
|
compiler.hooks.afterEmit.tap('StripObjectCallPlugin', (compilation) => {
|
|
const assets = compilation.getAssets();
|
|
assets.forEach((asset) => {
|
|
if (asset.name.endsWith('.js')) {
|
|
const outputPath = path.join(compiler.options.output.path, asset.name);
|
|
let code = fs.readFileSync(outputPath, 'utf8');
|
|
|
|
// 将 Object(module)(args) => module(args)
|
|
// 匹配 Object(...) 后跟一个小括号开始调用
|
|
code = code.replace(/\bObject\(\s*([^)]+?)\s*\)\s*\(/g, '$1(');
|
|
|
|
fs.writeFileSync(outputPath, code, 'utf8');
|
|
console.log(`[StripObjectCallPlugin] Patched ${asset.name}`);
|
|
}
|
|
});
|
|
});
|
|
}
|
|
}
|
|
|
|
module.exports = StripObjectCallPlugin;
|