【问题标题】:How to remove / disable console.log() from a node module如何从节点模块中删除/禁用 console.log()
【发布时间】:2021-05-09 11:17:00
【问题描述】:

我正在将代码推送到生产环境,该代码使用一个包,每次我调用它的特定函数时都会调用 console.log()。

此函数在我的代码中同时被调用数千次,我不希望日志记录减慢执行时间或使日志混乱。

在本地我已经进入节点模块并注释了注销,但是生产是自动部署的,并且在运行之前只运行 npm install。

有没有办法让我在生产中注释掉这条线,使其每次自动部署时都不会回来,或者让我禁止模块中的控制台日志?

【问题讨论】:

  • 根据您的捆绑器,您可以配置您的捆绑器以删除任何控制台交互。许多捆绑器使用正确的配置来做到这一点。否则,在您的构建过程中包含一个会在构建时搜索并删除控制台交互的内容。
  • 我上面评论的Webpack插件示例:github.com/webpack-contrib/terser-webpack-plugin#terseroptions
  • 问题是console.log 是全局的,会影响可能提供有用输出的第三方库。使用像“调试”这样的包,它允许配置输出量和范围。

标签: javascript node.js node-modules console.log


【解决方案1】:

您可以尝试重新定义console.log函数,在开头写console.log = function() {}

【讨论】:

    【解决方案2】:

    console.log 本身可以被空函数覆盖。

    // backup just in case you need it later somewhere
    var oldConsoleLog = window.console.log;
    window.console.log = () => {};
    

    但是,建议对麻烦的包做一些调查,大多数包只记录在他们的开发版本中,也许有一个你应该使用的包的生产版本。

    此外,还有一些 babel/webpack 插件可以为您删除控制台语句。例如 babel-plugin-transform-remove-console

    【讨论】:

    • 默认的console.log 不返回任何内容,因此如果您记录返回,那么您肯定会得到undefined。 @lastr2d2 的建议在这方面表现相同。
    猜你喜欢
    • 1970-01-01
    • 2021-07-10
    • 1970-01-01
    • 2021-06-24
    • 1970-01-01
    • 1970-01-01
    • 2019-06-12
    • 2019-01-27
    • 2018-12-06
    相关资源
    最近更新 更多