node repl 默认输出对象信息不足,可通过自定义 util.inspect 配置(如 depth: null、showhidden: true、colors: true)或替换 writer 函数提升可读性;支持为类实现 [util.inspect.custom] 方法定制输出;亦可全局设置 util.inspect.defaultoptions。

Node REPL 默认用 util.inspect 格式化输出对象,但对深层嵌套结构常显示为 [Object] 或截断内容,调试时信息不足。只需调整 util.inspect 的配置或替换默认 writer 函数,就能让输出更清晰、可读性更强。
控制输出深度和隐藏属性
默认 depth 为 2,深层嵌套会被折叠。可通过修改 REPL 的 writer 选项,传入自定义的 inspect 配置:
-
无限展开:设
depth: null,完整显示所有层级 -
显示不可枚举属性:加
showHidden: true,比如查看__proto__或私有字段 -
启用颜色高亮:设
colors: true,提升可读性(终端支持 ANSI 时生效)
在 REPL 启动时定制 writer
启动 REPL 实例时,直接覆盖默认 writer,避免每次手动调用 util.inspect:
const repl = require('repl');
const util = require('util');
repl.start({
prompt: '> ',
writer(output) {
return util.inspect(output, {
depth: 6,
colors: true,
showHidden: false,
maxArrayLength: 100
});
}
});
这样所有表达式结果(包括数组、Map、Set、循环引用等)都会按新规则格式化输出。
ZenHeart zenlink 与 zenlink-mcp 为 OpenClaw,涵盖安装、MCP 注册、钩子接线、入站轮询及升级维护。
为自定义类添加专属打印逻辑
若你定义了类(如 TreeNode),希望 console.log 或 REPL 输出时展示特定结构,可在类上实现 [util.inspect.custom] 方法:
class TreeNode {
constructor(value, children = []) {
this.value = value;
this.children = children;
}
[util.inspect.custom](depth, options) {
return `TreeNode { value: ${options.stylize(this.value, 'number')}, ` +
`children: [${this.children.map(c => util.inspect(c, options)).join(', ')}] }`;
}
}
REPL 会自动识别并调用该方法,输出变成可读的树形描述,而非默认的 TreeNode {}。
全局修改默认 inspect 行为
不想每次启动都配?可设置 util.inspect.defaultOptions,影响所有后续 util.inspect 调用(包括 REPL 内置 writer):
util.inspect.defaultOptions.depth = 5; util.inspect.defaultOptions.colors = true; util.inspect.defaultOptions.showHidden = false;
注意:此设置需在 REPL 启动前执行,且仅对当前 Node 进程有效。










