本文档涵盖了 Deno 的控制台实现,包括对象检查系统、控制台 API 方法、格式化和样式设置功能。控制台系统通过 console.log()、console.error() 和 console.table() 等方法,以及复杂的对象格式化和检查功能,提供了调试工具。
有关更广泛的 Deno 命名空间 API 的信息,请参阅 Deno 命名空间 API。有关 Node.js 控制台兼容性功能的更多信息,请参阅 Node.js API Polyfills。
控制台实现跨越了 JavaScript 和 Rust 层,核心格式化逻辑在 JavaScript 中,而性能关键型操作则在 Rust 中进行。
来源: ext/console/01_console.js1-10 ext/console/lib.rs1-31 ext/node/polyfills/internal/console/constructor.mjs115-189
控制台系统由几个关键组件组成,协同工作以提供全面的调试功能。
| 组件 | 文件 | 目的 |
|---|---|---|
formatValue | ext/console/01_console.js439-546 | 核心对象格式化逻辑 |
inspect | ext/console/01_console.js1583-1630 | 主要检查入口点 |
inspectArgs | ext/console/01_console.js1666-1692 | 格式化控制台参数 |
Console 类 | ext/node/polyfills/internal/console/constructor.mjs115-189 | Node.js 兼容的控制台 |
op_preview_entries | ext/console/lib.rs11-30 | 用于预览集合的 Rust op |
来源: ext/console/01_console.js5-162 ext/console/lib.rs5-9
对象检查系统是控制台实现的核心,负责将 JavaScript 值转换为可读的字符串表示。
来源: ext/console/01_console.js439-546 ext/console/01_console.js624-1026
检查系统支持多项高级功能
ctx.seen 数组和 ctx.circular 映射来跟踪和显示循环引用,显示为 [Circular *n]。Symbol.for("Deno.customInspect") 和 Symbol.for("nodejs.util.inspect.custom")。[Object] 占位符可配置检查深度,用于深层对象。来源: ext/console/01_console.js530-543 ext/console/01_console.js473-526 ext/console/01_console.js936-946
控制台提供一套完整的调试方法,遵循 Web 标准和 Node.js 兼容性。
来源: ext/node/polyfills/internal/console/constructor.mjs434-686 ext/console/01_console.js1737-1851
关键控制台方法及其实现
| 方法 | 实现 | 文件 | 目的 |
|---|---|---|---|
log、info、debug | consoleMethods.log | ext/node/polyfills/internal/console/constructor.mjs434-436 | 输出到 stdout |
warn、error | consoleMethods.warn | ext/node/polyfills/internal/console/constructor.mjs438-440 | 输出到 stderr |
assert | consoleMethods.assert | ext/node/polyfills/internal/console/constructor.mjs490-496 | 条件警告 |
table | consoleMethods.table | ext/node/polyfills/internal/console/constructor.mjs555-685 | 表格数据展示 |
time/timeEnd | consoleMethods.time | ext/node/polyfills/internal/console/constructor.mjs453-472 | 性能计时 |
来源: ext/node/polyfills/internal/console/constructor.mjs433-686
控制台支持丰富的文本样式和彩色输出,并能自动检测 TTY。
来源: ext/console/01_console.js204-302 ext/console/01_console.js174-188 ext/console/01_console.js373-375
控制台为不同的值类型定义了样式
来源: ext/console/01_console.js204-220
控制台支持 printf 风格的格式说明符,用于灵活的输出格式化。
来源: ext/console/01_console.js1720-1800 ext/console/01_console.js1966-2100
Deno 提供了 Node.js 兼容的控制台实现,以兼容现有的 Node.js 代码。
Node.js 的控制台构造函数提供了基于流的控制台功能。
| 功能 | 实现 | 目的 |
|---|---|---|
| 流绑定 | kBindStreamsEager, kBindStreamsLazy | 连接到 stdout/stderr 流 |
| 颜色检测 | kGetInspectOptions | 自动检测 TTY 颜色支持 |
| 分组缩进 | kGroupIndent, kGroupIndentationWidth | 控制台分组支持 |
| 错误处理 | createWriteErrorHandler | 流错误管理 |
来源: ext/node/polyfills/internal/console/constructor.mjs208-316 ext/node/polyfills/internal/console/constructor.mjs412-431
控制台系统通过 ops 与 Rust 集成,以实现性能关键的操作。
deno_console 扩展提供了基本的操作。
此操作可以预览集合(Maps、Sets)中的条目,以便在不完全迭代的情况下进行高效检查。
控制台也使用来自运行时(runtime)的核心 Ops。
op_get_constructor_name:获取对象的构造函数名称。op_get_non_index_property_names:高效获取对象属性名称。op_preview_entries:预览集合条目。