Inspector S1
中文标题:检查器
提案概览
- 阶段: Stage 1
- 状态: 进行中
- ECMAScript 版本: —
- 同步时间: 2026年8月26日
- English original · 官方仓库
提案速览
该提案旨在提供一种原生的、人类友好的方式来检查和比较值,解决当前错误消息中手动字符串插值的局限性。它提出了一种标准机制,能够提供对代理和内部插槽等内部细节的特殊访问,可能使测试运行器和模式匹配受益。
Note
以下 README 来自上游仓库,其中的阶段或状态标注可能滞后;当前信息以提案概览为准。
提案:检查器
提案发起人:
- @JakobJingleheimer
- @gibson042
作者:
- @JakobJingleheimer
阶段
当前:1(2025年5月30日)
问题
以人类友好的方式提供详细的检查信息,例如在比较(差异)值时。
在比较的上下文中,仅知道 A 不符合预期几乎毫无用处,因为你看不到 A 和 B 是什么。
示例(当前原生能力)
令人烦恼的:
更好的:
但是脆弱的:
示例(普遍期望)
原生提供的理由:
- 对用户空间来说,组合这些信息非常昂贵(占据了测试运行器执行时间的绝大部分)
- 美化打印
- 特殊访问(需要模式 - 在“生产环境”中不可用):
- 代理
- 表达式的组成部分(编译器)
- 结构的组成部分(差异)
- 内部插槽
- 广泛适用:不仅可以用于比较,还可以用于其他场景(例如模式匹配可以利用这一点;它完全可以独立使用)。
当前生态系统
目前,用户空间中有几个库以不同方式提供此功能。
运行时(可以提供特殊访问):
- Bun
inspect- 不提供特殊访问
- Node.js
util.inspect(也被 Deno 使用)- 提供特殊访问(例如
showProxy)
- 提供特殊访问(例如
库(无法提供特殊访问):
在阶段 2 之前
- 考虑自定义/可扩展性(公开符号?)
- 这对于可能希望在底层使用 Inspector 并只调整一小部分的框架尤其重要。
- 确定提供哪些信息、如何提供以及在什么情况下提供。
- 模式作为提供“特殊访问”的要求。