wuhan-gl/vite/plugins/remove-console.js

71 lines
2.2 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* @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
}
}
}