/* * @Author: 系统生成 * @Date: 2025-01-XX * @Description: 移除 console 插件 - 在生产环境构建时移除所有 console 语句 */ export default function createRemoveConsole() { return { name: 'remove-console', enforce: 'post', apply: 'build', // 只在构建时应用 transform(code, id) { // 只处理 JS/TS/Vue 文件 if (!/\.(js|ts|vue)$/.test(id)) { return null } // 移除 console.log, console.warn, console.info, console.debug // 保留 console.error(错误日志在生产环境也应该保留) // 匹配 console.xxx() 调用,支持多行参数 // 使用更精确的正则,匹配括号内的内容(包括嵌套括号) const removeConsolePattern = (method) => { // 匹配 console.method(...) 或 console.method(...); // 支持单行和多行,处理嵌套括号 const pattern = new RegExp( `console\\.${method}\\s*\\([^()]*(?:\\([^()]*(?:\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*;?`, 'g' ) return pattern } const methodsToRemove = ['log', 'warn', 'info', 'debug', 'group', 'groupEnd', 'table'] let transformedCode = code // 更简单但更可靠的方法:逐行处理 const lines = transformedCode.split('\n') const processedLines = lines.map(line => { let processedLine = line // 对于每个要移除的方法 methodsToRemove.forEach(method => { // 匹配 console.method(...) 或 console.method(...); // 使用更简单的模式,匹配到行尾或分号 const pattern = new RegExp(`console\\.${method}\\s*\\([^)]*\\)\\s*;?`, 'g') processedLine = processedLine.replace(pattern, '') }) return processedLine }) transformedCode = processedLines.join('\n') // 清理空行(可选,保持代码整洁) // transformedCode = transformedCode.replace(/^\s*\n/gm, '') // 如果代码有变化,返回转换后的代码 if (transformedCode !== code) { return { code: transformedCode, map: null } } return null } } }