首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >抑制‘`Buffer()’警告

抑制‘`Buffer()’警告
EN

Stack Overflow用户
提问于 2020-11-20 12:08:36
回答 1查看 2K关注 0票数 1

如何在不丢失其他警告的情况下,仅在Node.js中禁用Node.js警告?

代码语言:javascript
复制
ERROR   (node:8) [DEP0005] DeprecationWarning: Buffer() is deprecated due to security and usability issues. Please use the Buffer.alloc(), Buffer.allocUnsafe(), or Buffer.from() methods instead.

我知道Buffer()是不受欢迎的,我的代码中没有任何代码使用它,但是我的依赖项在使用它的链中很远,而且我不能立即修复它,所以我想沉默这些警告,因为它们被自动发送到Slack,这使得很难从我的应用程序中看到真正的错误。

我试过:

代码语言:javascript
复制
    process.on('warning', (warning) => {
      if (!warning.message.includes('Buffer() is deprecated')) {
        console.error(warning);
      }
    });

但这没有效果。我想这份通知是通过其他机制发出的。

我已经研究了修复调用new Buffer()的所有依赖项所需的内容,但是有很多,有些已经多年没有接受PRs,主要分支的测试失败等等,所以这不是一件容易的事情。此外,所有的公共关系都需要一段时间才能被接受、合并,并逐步上升。同时,我不希望每隔30秒发出一次警报,因为我做不到任何事情。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-20 16:27:39

这段猴子补丁代码将沉默特定的警告:

代码语言:javascript
复制
const origWarning = process.emitWarning;
process.emitWarning = function(...args) {
    if (args[2] !== 'DEP0005') {
        // pass any other warnings through normally
        return origWarning.apply(process, args);
    } else {
        // do nothing, eat the warning
    }
}

显然,在运行生成警告的代码之前,必须运行此代码。

FYI,为了解决这个问题,我采取了以下步骤:

  1. 我在缓冲码中查看了在何处以及如何生成警告。
  2. 在该代码中,我可以看到它调用了process.emitWarning(bufferWarning, 'DeprecationWarning', 'DEP0005');
  3. 因此,我为process.emitWarning()编写了一个猴子补丁,它寻找第三个参数为'DEP0005',这是特定于这个警告的参数。
  4. 然后,我对缓冲区警告和另一个警告进行了测试,以确保缓冲区警告被阻止,而其他警告没有被阻止。
  5. 然后,我检查了process.emitWarning() 这里的实现,以查看是否有任何标志或其他设置能够抑制特定的警告,以防出现支持的或更好的方法。没有找到这样的选择。
  6. 确认DEP0005仅用于此特定警告,包括nodejs存储库中的搜索和警告医生中的搜索。
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64929200

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档