Модуль npm-debug: как программно включать и отключать цели отладки?
В документации к Visionmedia's
debug
модуля для Node.js, я вижу, что можно программно включать и отключать различные цели отладки.
Мои попытки сделать это не увенчались успехом.
Я создал barebones-скрипт:
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")
не включил цель отладки и не вернул никаких пространств имен:
1 false
2 true
enabled namespaces: undefined
3 false
disabled namespaces: undefined
Когда я запускаю скрипт, используя
DEBUG=test node test.js
, Я получаю следующий результат, который показывает, что
debug.disable("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()
, то все работает.
Кажется, что для того, чтобы иметь возможность программно включать и отключать цели отладки, мне нужно использовать другой синтаксис:
debug("test")("message which can be enabled or disabled");
Но кажется, что это создает новый экземпляр отладки каждый раз, когда он используется, что было бы расточительно. И это не стандартный синтаксис, описанный в документации. И даже в этом случае
.enabled()
а также
.disabled()
методы не возвращают список пространств имен.
Есть что-то, что я неправильно понял?
1 ответ
Проблема была вызвана тем, что я полагался на версию, установленную в качестве зависимости для. Оказывается, для текущей версии требуется устаревшая версия.
После запуска
npm install express
сегодня (27 июня 2021 г.) вход для в был следующим.
"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".)
Это потому, что
package.json
файл для
express
прямо призывает к
"debug": "2.6.9"
.
Бег
npm update
не влияет на это.
Бег
npm install debug
устраняет проблему. Запись для
debug
в
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"
Задача решена.