Node.js中如何监听控制台尺寸变化以重新绘制TUI界面
Node.js 终端窗口大小变化监听及TUI重绘方案
核心实现逻辑
Node.js 标准输出对象 process.stdout 原生提供了 resize 事件,当关联的终端窗口尺寸被用户调整时会自动触发该事件,你只需要监听该事件并在回调中执行重绘逻辑即可。
完整代码示例
// 注册终端尺寸变化监听 process.stdout.on('resize', () => { // 获取调整后的最新终端宽高 const currentColumns = process.stdout.columns const currentRows = process.stdout.rows // 执行你的TUI重绘逻辑 renderTUI(currentColumns, currentRows) }) /** * 自定义TUI渲染函数 * @param {number} width 终端宽度(列数) * @param {number} height 终端高度(行数) */ function renderTUI(width, height) { // 示例:清空原有屏幕内容 process.stdout.write('\x1B[2J\x1B[0f') // 写入适配新尺寸的界面内容 process.stdout.write(`当前终端尺寸:${width} 列 × ${height} 行`) }
注意事项
- 该事件仅在 Node.js 进程绑定 TTY 终端时生效,如果你通过管道、重定向等非交互方式运行脚本,
resize事件不会触发 - Windows 平台的 cmd、PowerShell,以及类 Unix 系统下的 iTerm2、xterm、GNOME Terminal 等主流终端均支持该事件触发
- 极端场景下部分老旧终端不会主动发送 resize 信号,可搭配间隔100ms以上的定时轮询获取尺寸做兜底兼容
- 如果你使用 blessed、ink 等第三方 TUI 开发库,多数库已经内置了 resize 事件的封装,可直接调用库提供的对应API,不需要手动监听底层事件
内容的提问来源于stack exchange,提问作者Alectionik
相关产品推荐
相关产品推荐

