部署项目,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
相关推荐
从零开始学习人工智能5 小时前
快速搭建B/S架构HTML演示页:从工具选择到实战落地
前端·架构·html
虫虫rankourin6 小时前
在 create-react-app (CRA) 创建的应用中使用 react-router-dom v7以及懒加载的使用方法
前端·react.js
小刘鸭地下城6 小时前
Web安全必备:关键 HTTP 标头解析
前端
yddddddy6 小时前
html基本知识
前端·html
荣达7 小时前
koa洋葱模型理解
前端·后端·node.js
reembarkation7 小时前
使用pdfjs-dist 预览pdf,并添加文本层的实现
前端·javascript·pdf
KenXu8 小时前
F2C-PTD工具将需求快速转换为代码实践
前端
给月亮点灯|8 小时前
Vue3基础知识-setup()、ref()和reactive()
前端·javascript·vue.js
芜青8 小时前
【Vue2手录12】单文件组件SFC
前端·javascript·vue.js
冷冷的菜哥8 小时前
react实现无缝轮播组件
前端·react.js·typescript·前端框架·无缝轮播