Модуль 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"

Задача решена.

Другие вопросы по тегам