部署项目,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
相关推荐
Wang's Blog27 分钟前
Vibe Coding一人即团队系列28: 前端、后端与数据库的概念解析
前端·数据库
Dovis(誓平步青云)35 分钟前
模拟器横评:电脑上看小说、追短剧用什么模拟器?MuMu、雷电、腾讯手游助手实测
android·java·服务器·前端·javascript·电脑
踩蚂蚁36 分钟前
把自定义唤醒词部署到 ESP32-S3:ONNX 转 INT8 TFLite 的完整链路
前端
前端繁华如梦36 分钟前
用 Vite + Electron + React + Python 重造 3D 服装打版软件
前端
豆沙沙包?1 小时前
函数重载/类和对象(P14-P60)
前端·算法
三十而立洋1 小时前
彻底搞懂跨域:原理、CORS、解决方案与实战避坑
前端
计算机魔术师1 小时前
ASR转录总出错?Google新模型WER降到2.6%,还能自动帮你改口误
前端
xcs194051 小时前
新版 IDEA(尤其是 2024/2025/2026)越来越臃肿
前端·人工智能·intellij-idea
Patrick_Wilson1 小时前
iOS 第三方浏览器图片下载失败问题
前端·ios·浏览器