npm-debug 模块:如何以编程方式启用和禁用调试目标?

npm-debug module: how to enable and disable debug targets programatically?

在 Node.js 的 visionmedia debug 模块的 documentation 中,我发现可以通过编程方式启用和禁用不同的调试目标。

我在这方面的尝试并不是很成功。

我创建了一个准系统脚本:test.js

const debug = require("debug");
let test = debug("test"); // created before being enabled

console.log(1, debug.enabled("test"));

let namespaces = debug.enable("test");
// test = debug("test");
console.log(2, debug.enabled("test"));
console.log("enabled namespaces:", namespaces);

test("this is test");

namespaces = debug.disable();
// test = debug("test");
console.log(3, debug.enabled("test"));
console.log("disabled namespaces:", namespaces);

test("you shouldn't see this");

当我 运行 使用 node test.js 的脚本时,我得到以下输出,这表明 debug.enable("test") 既没有启用 test 调试目标,也没有它return编辑了任何命名空间:

1 false
2 true
enabled namespaces: undefined
3 false
disabled namespaces: undefined

当我 运行 使用 DEBUG=test node test.js 的脚本时,我得到以下输出,这表明 debug.disable("test") 既没有禁用 test 调试目标,也没有它return编辑了任何已禁用命名空间的名称:

1 true
2 true
enabled namespaces: undefined
  test this is test +0ms
3 false
disabled namespaces: undefined
  test you shouldn't see this +0ms

但是,如果我取消注释使用 .enable().disable() 重新创建 test 调试目标 after 的行,那么一切正常。

看来,为了能够以编程方式启用和禁用调试目标,我需要使用不同的语法:

debug("test")("message which can be enabled or disabled");

但是好像每次使用都会创建一个新的调试实例,这样会很浪费。而且它不是文档中描述的标准语法。而且,即使如此,.enabled().disabled() 方法也不会 return 命名空间列表。

我有什么严重误解的地方吗?

这个问题是因为我依赖安装的 debug 版本作为 express 的依赖项。原来 express 的当前版本需要 debug.

的过时版本

在今天(2021 年 6 月 27 日)运行npm install express 之后,debugpackage-lock.json 中的条目如下。

"debug": {
  "version": "2.6.9",
  "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
  "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
  "requires": {
    "ms": "2.0.0"
  }

"版本": "2.6.9"

(这是 express 的“4.17.1”版本。)

这是因为 expresspackage.json 文件明确要求 "debug": "2.6.9"

运行 npm update对此没有影响。

运行 npm install debug 确实解决了这个问题。 package-lock.jsondebug 的条目设置如下:

"debug": {
  "version": "4.3.1",
  "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
  "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
  "requires": {
    "ms": "2.1.2"
  }

"版本": "4.3.1"

问题已解决。