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
之后,debug
在 package-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”版本。)
这是因为 express
的 package.json
文件明确要求 "debug": "2.6.9"
。
运行 npm update
对此没有影响。
运行 npm install debug
确实解决了这个问题。 package-lock.json
中 debug
的条目设置如下:
"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"
问题已解决。
在 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
之后,debug
在 package-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”版本。)
这是因为 express
的 package.json
文件明确要求 "debug": "2.6.9"
。
运行 npm update
对此没有影响。
运行 npm install debug
确实解决了这个问题。 package-lock.json
中 debug
的条目设置如下:
"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"
问题已解决。