我在过去 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/