部署项目,console.log为什么要去掉?

console.log的弊端

1. 影响性能(轻微但可优化)

console.log 会占用 内存CPU 资源 ,尤其是在循环或高频触发的地方(如 mousemove 事件)。 虽然现代浏览器优化了 console,但大量日志仍可能导致 轻微性能下降

2. 暴露敏感信息(安全风险)

可能会 泄露 API 接口、Token、用户数据 等敏感信息,容易被恶意利用。

3. 干扰调试(影响开发者体验)

生产环境日志过多,可能会 掩盖真正的错误信息 ,增加调试难度。 开发者可能会误以为某些 console.log预期行为,而忽略真正的 Bug。

4. 增加代码体积(影响加载速度)

即使 console.log 本身很小,但 大量日志 会增加打包后的文件体积,影响 首屏加载速度

解决方案:移除生产环境的 console.log

1. 使用 Babel 插件

babel.config.js 中配置:

ini 复制代码
module.exports = {
  presets: [
    '@vue/cli-plugin-babel/preset',
  ],
  plugins: [
    ['@babel/plugin-proposal-optional-chaining'],
    ...process.env.NODE_ENV === 'production' ? [['transform-remove-console', { exclude: ['info', 'error', 'warn'] }]] : []
  ]
}

特点

  • 不影响源码,仅在生产环境生效,开发环境保留完整 console
  • 配置简单直接,适合快速实现基本需求。
  • 依赖 Babel 插件

2. 使用 Terser 压缩时移除(Webpack/Vite 默认支持)

vite.config.jswebpack.config.js 中配置:

ini 复制代码
module.exports = {
  chainWebpack: (config) => {
    config.optimization.minimizer("terser").tap((args) => {
      args[0].terserOptions.compress = {
        ...args[0].terserOptions.compress,
        drop_console: true,       // 移除所有 console
        pure_funcs: ["console.log"], // 只移除 console.log,保留其他
      };
      return args;
    });
  },
};

特点

  • 不影响源码,仅在生产环境生效,开发环境保留完整 console
  • 避免 Babel 插件兼容性问题
  • 需要额外配置

3. 自定义 console 包装函数(按需控制)

javascript 复制代码
// utils/logger.js
const logger = {
  log: (...args) => {
    if (process.env.NODE_ENV !== "production") {
      console.log("[LOG]", ...args);
    }
  },
  warn: (...args) => {
    console.warn("[WARN]", ...args);
  },
  error: (...args) => {
    console.error("[ERROR]", ...args);
  },
};

export default logger;

使用方式

arduino 复制代码
import logger from "./utils/logger";

logger.log("Debug info"); // 生产环境自动不打印
logger.error("Critical error"); // 始终打印

特点

  • 可以精细控制日志,可控性强,可以自定义日志级别。
  • 不影响 console.warnconsole.error
  • 需要手动替换 console.log
相关推荐
Captaincc4 分钟前
Ilya 现身多大毕业演讲:AI 会完成我们能做的一切
前端·ai编程
teeeeeeemo17 分钟前
Vue数据响应式原理解析
前端·javascript·vue.js·笔记·前端框架·vue
Sahas101920 分钟前
__VUE_PROD_HYDRATION_MISMATCH_DETAILS__ is not explicitly defined.
前端·javascript·vue.js
Jinxiansen021131 分钟前
Vue 3 实战:【加强版】公司通知推送(WebSocket + token 校验 + 心跳机制)
前端·javascript·vue.js·websocket·typescript
MrSkye31 分钟前
React入门:组件化思想?数据驱动?
前端·react.js·面试
BillKu41 分钟前
Java解析前端传来的Unix时间戳
java·前端·unix
@Mr_LiuYang41 分钟前
网页版便签应用开发:HTML5本地存储与拖拽交互实践
前端·交互·html5·html5便签应用
JacksonGao1 小时前
一分钟带你了解React Fiber的工作单元结构!
前端·react.js
前端农民晨曦1 小时前
深入浏览器事件循环与任务队列架构
前端·javascript·面试
Vhen1 小时前
Taro Echarts封装内外环形饼图
前端