如何在使用 create-react-app 创建的 React 应用程序的生产版本中删除 console.log?

Aja*_*jay 15 build console.log reactjs create-react-app

如何在使用 create-react-app CRA 创建的 React 应用程序的生产版本中删除 console.log?

Bar*_*rki 61

我正在使用这种方法来避免弹出react-scripts

if (process.env.NODE_ENV === 'production') {
  console.log = () => {}
  console.error = () => {}
  console.debug = () => {}
}
Run Code Online (Sandbox Code Playgroud)

index.js

import React from 'react'
import ReactDOM from 'react-dom'
import App from './App'
import './styles/main.scss'

// replace console.* for disable log on production
if (process.env.NODE_ENV === 'production') {
  console.log = () => {}
  console.error = () => {}
  console.debug = () => {}
}

ReactDOM.render(<App />, document.getElementById('root'))
Run Code Online (Sandbox Code Playgroud)


小智 7

这是我使用的解决方案craco

"@craco/craco": "^6.0.0",
"react-scripts": "4.0.1",
Run Code Online (Sandbox Code Playgroud)

craco.config.js

module.exports = {
  webpack: {
    configure: (webpackConfig) => {
      if (process.env.NODE_ENV === 'production') {
        // remove console in production
        const TerserPlugin = webpackConfig.optimization.minimizer.find((i) => i.constructor.name === 'TerserPlugin');
        if (TerserPlugin) {
          TerserPlugin.options.terserOptions.compress['drop_console'] = true;
        }
      }

      return webpackConfig;
    },
  },
};

Run Code Online (Sandbox Code Playgroud)

  • @Ajay craco 是一个专门允许您在使用 CRA 时设置 webpack 的库。该解决方案非常相关。 (3认同)

Mud*_*Ali 7

这是我的解决方案使用craco

安装https://babeljs.io/docs/en/babel-plugin-transform-remove-console/

并更新 craco.config.js 像

module.exports = {
  plugins: [{ plugin: require('@semantic-ui-react/craco-less') }],
  babel: {
    // ...
  plugins: process.env.NODE_ENV === "production" ? [["transform-remove-console", { "exclude": ["error"] }]] : []
  }
}
Run Code Online (Sandbox Code Playgroud)


hel*_*rld 6

这就是我所做的。helper使用名为的文件创建一个文件夹ConsoleHelper.js

const ConsoleHelper = (data) => {
  if (process.env.NODE_ENV === 'production') return;
  console.log(data);
}

export default ConsoleHelper;
Run Code Online (Sandbox Code Playgroud)

而不是console.log(data)ConsoleHelper(data);

希望这可以帮助。我控制台日志很多:)

  • @arunvelsriram 你丢失了日志的原始文件名和行号,所以它几乎没有用。您的所有日志都将来自 ConsoleHelper.js 第 3 行 (4认同)
  • 此解决方案的问题在于,此控制台消息的来源将被省略并替换为助手的位置。 (2认同)