0

在Visionmedia 的Node.js 模块的文档debug中,我看到可以以编程方式启用和禁用不同的调试目标。

我这样做的尝试并不是很成功。

我创建了一个准系统脚本: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

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

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

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

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

有什么我严重误解的吗?

4

1 回答 1

0

这个问题是因为我依赖debug安装的版本作为express. 事实证明,当前版本express需要一个过时版本的debug.

今天(2021 年 6 月 27 日)运行后, innpm 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”

(这是版本“4.17.1” express。)

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

跑步npm update对此没有影响。

运行npm install debug确实可以解决问题。debugin的条目package-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”

问题解决了。

于 2021-06-27T07:35:55.730 回答