/** * 使用参数 --no-plugins参数编译时,app.json中将去除插件使用的配置,其它json文件去除带plugin-private://的配置 */ 'use strict'; module.exports = { apply(compiler) { compiler.hooks.emit.tap('compilation', compilation => { if (!(process.argv && process.argv.indexOf('--no-plugins') > -1)) { return; } // 遍历所有资源文件 for (let filePathName in compilation.assets) { if (/^app\.json/i.test(filePathName)) { console.log('\n- app.json中将去除插件使用的配置...'); // 获取文件内容 let content = compilation.assets[filePathName].source() || ''; let data = JSON.parse(content); if (typeof data.plugins !== 'undefined') { delete data.plugins; } if (typeof data.subPackages !== 'undefined' && data.subPackages.length) { for (let i in data.subPackages) { if (typeof data.subPackages[i].plugins !== 'undefined') { delete data.subPackages[i].plugins; } } } content = JSON.stringify(data, null, 2); // 重写指定输出模块内容 compilation.assets[filePathName] = { source() { return content; }, size() { return content.length; } }; } else if (/.*\.json/i.test(filePathName)) { let content = compilation.assets[filePathName].source() || ''; let data = JSON.parse(content); if (typeof data.usingComponents === 'object') { for (let i in data.usingComponents) { if (/^plugin-private:\/\//i.test(data.usingComponents[i])) { delete data.usingComponents[i]; } } } content = JSON.stringify(data, null, 2); // 重写指定输出模块内容 compilation.assets[filePathName] = { source() { return content; }, size() { return content.length; } }; } } }); }, };