@dabh/diagnostics

中文文档
2.0.9发布于 2026/09/07MITCommonJS近 30 天下载 1.1亿

调试您节点.js 模块和事件循环的工具

中文使用文档
文档目录10 节
  1. 分发和维修
  2. 安装
  3. 使用量
  4. 导言
  5. 高级用途
  6. API 密码
  7. 修改器
  8. 适配器
  9. 盗取者
  10. 许可证

diagnostics

分发和维修

达格·哈马舍尔德图书馆 分配和维护 DABH 有限责任公司。 。 。 . 维修和软件咨询查询: 哈啰@dabh.llc。 。 。 .

这一分布基于Arnout Kazemier的诊断,Martijn Swaagman, 及其贡献者。 原版权通知和麻省理工学院许可证为: 保存在 自由主义。 。 。 .

在节点.js核心中使用的调试模式演变中的诊断,
这种极其小而强大的技术最好比作特色 标记为伐木工。 默认已禁用已创建的调试日志, 但可以 启用时不更改代码行,使用旗帜.

  • 允许在多个 JavaScript 环境中进行调试, 如节点.js, 浏览器 和反应 - Native.
  • 分开开发与生产,以尽量减少对您的影响 捆绑时应用.
  • 允许定制日志、信件和更多信息.

Output Example

安装

模块发布于公共npm注册,可以安装于 运行中 :

npm install --save @dabh/diagnostics

使用量

导言

简单地创建一个新的日志 require 页:1 @dabh/diagnostics 模块和调用 返回函数。 它接受两个论点:

  1. namespace 需求 这是您的日志的命名空间 所以我们知道是否有必要 在使用调试旗时启用您的日志。 通常您使用名称为 您的库或应用程序作为第一个根命名空间。 比如说,如果你是 在库中建立解析器( 例如) 您可以设置命名空间 example:parser。 。 。 .
  2. options 对日志附加配置的对象 . 识别以下密钥:
    • force 强制启用日志机 .
    • colors 默认启用日志的颜色, 但您可以设置此功能 选项到 false 来禁用它.
const debug = require('@dabh/diagnostics')('foo:bar:baz');
const debug = require('@dabh/diagnostics')('foo:bar:baz', { options });

debug('this is a log message %s', 'that will only show up when enabled');
debug('that is pretty neat', { log: 'more', data: 1337 });

与 console.log 在开发过程中添加或删除的语句 使用寿命周期后,您会创建有意义的日志语句,使您深入了解 您正在开发的库或应用程序 .

创建的调试器使用不同的"适应器"来提取调试旗 出自JavaScript环境. 学习如何启用调试旗 在您的特定环境中,单击下面启用的适配器.

请注意,返回的日志已全部配置出框, 您 不需要设置任何适配器/修饰器 当您想要对进程进行更先进的控制时。 但如果你想的话 了解更多,阅读下一节.

高级用途

有两种具体的使用模式 diagnostic, 图书馆开发者 将它作为模块和应用程序开发者的一部分执行 在其应用程序中使用,或者正在寻找使用信件的方法.

使用在其中讨论的简单日志界面 导言 部分,我们让开发者很容易加入到他们的库中 应用、应用和应用 API 密码 我们允许无限定制 通过允许自定义适配器、记录器和修改器来确保此库 保持相关性。 这些方法不仅允许引入新的伐木机, 但让你在盒子外思考 例如,您可以保存历史 ,并输出未发现的例外情形 您的应用程序所以您有额外的上下文

const diagnostics = require('@dabh/diagnostics');

let index = 0;
const limit = 200;
const history = new Array(limit);

//
// Force all `diagnostic` loggers to be enabled.
//
diagnostics.force = process.env.NODE_ENV === 'prod';
diagnostics.set(function customLogger(meta, message) {
  history[index]= { meta, message, now: Date.now() };
  if (index++ === limit) index = 0;

  //
  // We're running a development build, so output.
  //
  if (meta.dev) console.log.apply(console, message);
});

process.on('uncaughtException', async function (err) {
  await saveErrorToDisk(err, history);
  process.exit(1);
});

上面的小片段将保留200个有限的FIFO(First In First Out) 当应用程序崩溃时可以引用的所有调试消息的队列

生产与发展

当你 require 页:1 @dabh/diagnostics 模块将给您一个日志 优化用于 development 这样它就能提供最好的开发者经验 也许吧.

开发记录器可以实现所有 适配器 送给你的 JavaScript 环境, 添加一个将信件输出到 console.log 并登记更改信件的功能,这样日志信件会与 提供命名空间, 以便您知道日志消息的来源 .

开发日志没有启用任何适配器、修改器和日志 默认。 这将确保您的日志信息不会意外出现于 生产。 不过这并不意味着无法调试 正在制作中的信息。 你们可以 force 要启用的调试器,以及 供应a 自定义日志。 。 。 .

const diagnostics = require('@dabh/diagnostics');
const debug = debug('foo:bar', { force: true });

//
// Or enable _every_ diagnostic instance:
//
diagnostics.force = true;
网络软件包

WebPack的概念是 模式是因为 生成不同的

module.exports = {
  mode: 'development' // 'production'
}

当您使用 WebPack CLI 构建您的应用程序时, 您可以使用 --mode 旗帜 :

webpack --mode=production app.js -o /dist/bundle.js
节点.js

当你使用您的应用程序运行时 Node.js 你应该 NODE_ENV 环境变量改为 production 确保您的图书馆 为生产优化进口.

NODE_ENV=production node app.js

API 密码

返回的日志显示一些可用于 您的应用程序或库 :

启用

返回的日志将有一个 .enabled 分配给它的财产。 这个布尔 可用于检查是否启用了日志 :

const debug = require('@dabh/diagnostics')('foo:bar');

if (debug.enabled) {
  //
  // Do something special
  //
}

该财产被曝光为:

  • 在伐木机上的财产.
  • 元/ 选项对象上的属性 .

名称空间

这是您最初为函数提供的命名空间 .

const debug = require('@dabh/diagnostics')('foo:bar');

console.log(debug.namespace); // foo:bar

该财产被曝光为:

  • 在伐木机上的财产.
  • 元/ 选项对象上的属性 .

. dev/prod (中文(简体) )

有不同的建筑物可用 diagnostics当你创建一个 使用 NODE_ENV=production 你会是 以最优化、较小的 diagnostics 以减小你的捆绑大小. 这个 dev 财务报告和审定财务报表 prod 返回日志上的布尔表示您是否有 生产或开发版的伐木机.

const debug = require('@dabh/diagnostics')('foo:bar');

if (debug.prod) {
  // do stuff
}

该财产被曝光为:

  • 在伐木机上的财产.
  • 元/ 选项对象上的属性 .

设定

设置新日志为默认值 全部 diagnostic 实例。 通过了 参数应该是一个函数,将日志消息写到您曾经在哪里 想要吗? 它收到两个论点:

  1. meta 包含所有选项的对象 要写入日志信件的日志以及日志的属性 调试器, 如 prod, (中文(简体) ), dev, (中文(简体) ), namespace, (中文(简体) ), enabled。见 API 密码 页:1 所有暴露的属性.
  2. args 需要写入的日志信件数组 .
const debug = require('@dabh/diagnostics')('foo:more:namespaces');

debug.use(function logger(meta, args) {
  console.log(meta);
  console.debug(...args);
});

这种方法被曝光为:

  • 在伐木机上的方法.
  • 元/ 选项对象的方法 .
  • 方法 diagnostics 模块.

修改

修改方法允许您添加新信件修改器到 全部 diagnostic 实例。 通过的参数应该是一个函数,它会返回过去 修改后的消息。 该函数收到两个参数:

  1. message数组,日志信息.
  2. options,对象,输入日志时的选项 最初创建.
const debug = require('@dabh/diagnostics')('example:modifiers');

debug.modify(function (message, options) {
  return messages;
});

这种方法被曝光为:

  • 在伐木机上的方法.
  • 元/ 选项对象的方法 .
  • 方法 diagnostics 模块.

见 修改 更多信息.

使用情况

添加新内容 adapter 改为 全部 diagnostic 实例。 通过的论据 函数返回布尔,以显示是否通过 namespace 允许写入日志消息.

const diagnostics = require('@dabh/diagnostics');
const debug = diagnostics('foo:bar');

debug.use(function (namespace) {
  return namespace === 'foo:bar';
});

这种方法被曝光为:

  • 在伐木机上的方法.
  • 元/ 选项对象的方法 .
  • 方法 diagnostics 模块.

见 适配器 更多信息.

修改器

尽可能灵活地改变我们的信息 提出一个概念: modifiers 可增强调试消息. 您可以引入您认为重要的功能或细节 对调试消息, 并且不需要我们添加额外的 bloat 到 diagnostic 核心键.

例如,您希望信件的前缀为日期 日志消息发生 :

const diagnostics = require('@dabh/diagnostics');

diagnostics.modify(function datetime(args, options) {
  args.unshift(new Date());
  return args;
});

现在所有信件都会被前缀为输出的日期 new Date()。 。 。 . 以下修改剂随同 diagnostics 并启用在 发展 仅模式 :

命名空间

为所有调试实例启用此修改符, 并预缀信件 带有登录名称空间的名称。 名称空间为颜色 使用 colorspace 模块,将类似命名空间放在相同的下 色相空间. 您可以为调试器设置多个命名空间 命名空间应当用 :

foo
foo:bar
foo:bar:baz

对于基于控制台的输出 namespace-ansi 已使用.

适配器

适应器允许 diagnostics 来拉 DEBUG 财务报告和审定财务报表 DIAGNOSTICS 环境 来自不同来源的变量。 并非每个 JavaScript 环境都有 process.env 我们可以发挥杠杆作用。 适应器可以让我们有不同的 适用于不同环境的适配器。 意思是你可以写出自己的习惯 适配器,如果需要的话.

这个 adapter 函数应该传递一个函数作为参数,这个函数 将接收 namespace 作为参数的日志应该返回 a 布尔表示是否启用该日志 .

const debug = require('@dabh/diagnostics')('example:namespace');

debug.adapter(require('@dabh/diagnostics/adapters/localstorage'));

修改器只允许 development下列适配器为 备有:

进程.env

此适配器启用于 node.js。 。 。 .

使用 DEBUG 或者说 DIAGNOSTICS (两者都被确认)环境变量 以调试旗通过 :

UNIX/Linux/马克

DEBUG=foo* node index.js

在Windows上使用环境变量有点不同,也取决于 您正在使用的工具链 :

窗口

set DEBUG=foo* & node index.js

动力壳

$env:DEBUG='foo*';node index.js

散列轴

此适配器启用于 browsers。 。 。 .

此适配器使用 window.location.hash 作为环境来源 变量。 它假设散列格式化使用与查询相同的语法 字符串 :

http://example.com/foo/bar#debug=foo*

它触发两个 debug= 财务报告和审定财务报表 diagnostics= 名称.

本地图集

此适配器启用于 browsers。 。 。 .

此适配器使用 localStorage ,用于存储调试旗的浏览器. 您可以在应用程序代码中设置调试标记, 但您可以 还打开了浏览器WebInspector,并通过控制台启用.

localStorage.setItem('debug', 'foo*');

它触发两个 debug 财务报告和审定财务报表 diagnostics 存储项目。 (请注意) 以小写输入这些密钥)

同步组合

此适配器启用于 react-native。 。 。 .

此适配器使用 AsyncStorage API 显示于 react-native 库以存储并读取 debug 或者说 diagnostics 存储项目.

import { AsyncStorage } from 'react-native';

AsyncStorage.setItem('debug', 'foo*');

与其他适配器不同,这是唯一的适配器是 async 所以这意味着 我们无法立即确定 是否应该建立一个日志 启用或禁用。 当日志被创建时 react-native 我们刚开始 假设已禁用, 期间发送的任何信件都会被排队 内部.

一旦我们收到数据 AsyncStorage API 我们会决定 如果启用了日志, 将队列中的信件冲出并设定 全部 enabled 返回的日志中相应的属性.

盗取者

默认情况下, 它会记录所有信件到 console.log 当日志为时 启用了使用一个适配器设置的调试旗.

许可证

麻省理工学院

版本与发布记录

@dabh/diagnostics 共发布 7 个版本,首次发布于 2020/06/23;过去 12 个月发布了 1 个版本。

版本发布日期距今
2.0.9latest2026/09/072 个月前
2.0.82025/10/011.1 年前
2.0.72025/09/301.1 年前
2.0.62025/09/301.1 年前
2.0.52025/09/301.1 年前
2.0.32022/02/134 年前

关于 @dabh/diagnostics 的常见问题

@dabh/diagnostics 是什么?

调试您节点.js 模块和事件循环的工具

如何安装 @dabh/diagnostics?

在项目目录运行 npm install @dabh/diagnostics,或使用 pnpm add / yarn add / bun add。

@dabh/diagnostics 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/dabh__diagnostics 是否存在。

@dabh/diagnostics 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@dabh/diagnostics 可以商用吗?

@dabh/diagnostics 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@dabh/diagnostics 的下载量有多少?

根据 npm 官方下载统计,@dabh/diagnostics 在 2026/10/11 – 2026/11/09 这 30 天内被下载 112,739,843 次,日均约 3,757,995 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@dabh/diagnostics 还在维护吗?

最新版本 2.0.9 发布于 2026/09/07(2 个月前);至今共发布 7 个版本,其中过去 12 个月发布了 1 个;首次发布于 2020/06/23。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。