javascript - WebStorm - 如何在 npm 包中找到问题的根源? ( Node :36378) [DEP0005] DeprecationWarning

标签 javascript node.js logging buffer webstorm

我在过去 6 个月内开始收到此错误,可能是因为更新了 node.js

(node:36378) [DEP0005] DeprecationWarning: Buffer() is deprecated due to security and usability issues. Please use the Buffer.alloc(), Buffer.allocUnsafe(), or Buffer.from() methods instead.

我已经查明了导致此警告的特定包:https://github.com/irhc/js-logging

它不再维护所以我必须深入挖掘并找到这个问题的根源。但是我的 IDE (WebStorm) 没有显示任何代码行。我还搜索了源代码,但找不到在任何地方使用的 Buffer() 。我怎样才能找到这个问题的根源?

顺便说一句,我还在同一个文件中使用 fs,实际上里面有 Buffer(),但是注释掉依赖项和相关函数并没有摆脱的警告。

编辑:感谢@ix3 的建议,我缩小了问题的范围

  • 在 Node 服务器中运行时不会发生这种情况
  • 从终端运行 mocha 测试时不会发生这种情况 https://prnt.sc/lh012c
  • Webstorm 运行 mocha 测试时确实会发生这种情况:https://prnt.sc/lh01ac

所以问题出在Webstorm + Mocha + Node + js-logging的交互上。他们每个人都可以完美地单独工作,但是当他们在一起时我会遇到这个错误。

最佳答案

js-logging 不再维护的事实使其成为明智的首选。但是,如果它没有调用 new Buffer(也没有调用它的任何依赖项),那么一定是其他原因触发了该警告消息。您是如何将问题“查明”到那个包裹的?

您可能想尝试在附加调试器(例如 Chrome 中内置的调试器)的情况下运行您的程序。您可以按照说明执行此操作 that Paul Irish explains here .另请注意,Chrome 70 现在 offers ndb .

您还可以尝试“grepping”您的整个源代码树(包括 node_modules)以获取“new Buffer”。有多种方法可以做到这一点,它们因操作系统而异。例如,在像 Linux 这样的 POSIX 系统上,您通常可以从项目的根文件夹中执行类似 grep -drecurse "new Buffer". 的操作,以在该项目的所有文件中搜索该字符串的所有匹配项树。

最后,值得重申的是,您列出的消息不是错误,而只是警告。因此,它不会导致任何不同的行为。换句话说,修复它只会让消息消失;它不会显着改变程序的行为。当然,您仍然应该努力解决它,因为警告告诉您在未来的 Node 版本中您现在拥有的代码将停止工作。

编辑:查看您分享的无音频视频,看起来您正在做您的问题未提及的各种事情,例如

  • 您正在使用 TypeScript 编写(当您使用纯 JavaScript 时会发生什么情况?)
  • 您只在 IDE 中运行测试(当您从命令行运行它们时会发生什么?)

很可能您使用的是旧版本的 ts-node used the Buffer constructor until about May 2018 .

旁白: 要跟踪依赖项何时发生变化(尤其是......的依赖项的依赖项),我强烈建议使用 yarn或至少 package-lock.json否则,由于上游的更改,您的应用完全有可能在某一天构建和运行,而在下一天就无法运行。

关于javascript - WebStorm - 如何在 npm 包中找到问题的根源? ( Node :36378) [DEP0005] DeprecationWarning,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53201124/

相关文章:

JavaScript 返回对象

ios - 在 iOS 上修剪日志文件开头行的快速方法

javascript - Grunt、Gulp.js 和 Bower 之间有什么区别?为什么以及何时使用它们?

javascript - 执行请求数组失败,返回 "Error: done() called multiple times"。映射请求数组不会触发请求

javascript - 使用点符号或键时 JavaScript 如何查找值

javascript - ACH Stripe 银行账户验证

javascript - MarkLogic 8 Ingestion Job 在 JavaScript 中对集合进行非规范化

node.js - Prisma:使用具有非唯一字段的 "where"进行更新?

node.js - Bluebird.js : How to add wait for each iteration of Promise. map ?

java - 在 Android 上使用 Apache LogFactory