在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
但是,如果我在使用or后test
取消注释重新创建调试目标的行,那么一切正常。.enable()
.disable()
看来,为了能够以编程方式启用和禁用调试目标,我需要使用不同的语法:
debug("test")("message which can be enabled or disabled");
但这似乎每次使用时都会创建一个新的调试实例,这将是一种浪费。而且它不是文档中描述的标准语法。而且,即便如此,.enabled()
and.disabled()
方法也不会返回命名空间列表。
有什么我严重误解的吗?