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

问题描述

在用于 Visionmedia 的用于 Node.js 的 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 调试目标,也没有返回任何命名空间:>

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

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

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

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

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

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

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

是否有什么地方被我严重误解了?

解决方法

该问题是因为我依赖安装为 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”版本。)

这是因为 package.jsonexpress 文件显式调用 "debug": "2.6.9"

运行 npm update 对此没有影响。

运行 npm install debug 确实可以解决问题。 debugpackage-lock.json 的条目设置如下:

"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”

问题解决了。