如何在JS/Node.js中隐藏控制台光标且不改变其位置?
Node.js 中隐藏控制台光标且不改变位置的实现方案
经过测试,我们可以通过ANSI转义序列\u001B[?25l(隐藏光标)和\u001B[?25h(恢复光标)实现需求,同时避免光标位置异常问题。以下是两种可靠的实现方式:
方法一:使用readline接口直接写入ANSI序列
通过Node.js内置的readline模块写入转义序列,既能保证光标隐藏/恢复时位置不变,也能在VS Code集成终端中正常工作。若在隐藏期间移动光标,恢复后光标会回到正确位置。
代码示例:
// ES模块(*.mjs 或 package.json中设置"type": "module") import readline from 'readline'; // 或 CommonJS模块 // const readline = require('readline'); const rl = readline.createInterface({ input: process.stdin, output: process.stdout }); rl.write('\u001B[?25l'); // 隐藏光标 // 可在此执行光标移动操作,比如: // readline.moveCursor(process.stdout, 2, 0); rl.write('\u001B[?25h'); // 恢复光标
方法二:使用cli-cursor npm包
cli-cursor包封装了上述ANSI转义序列,使用更简洁,效果与直接写入序列完全一致,同样能保持光标位置。
代码示例:
// ES模块 import cliCursor from 'cli-cursor'; // 或 CommonJS模块 // const cliCursor = require('cli-cursor'); cliCursor.hide(); // 隐藏光标 // 可在此执行光标移动操作 cliCursor.show(); // 恢复光标
注:
ansi-escapes包原理类似,推测也能实现相同效果(未验证)。
注意事项
若使用console.log()替代rl.write()来写入转义序列,由于console.log()每次调用都会添加新行,会导致光标位置偏移,此时需要调用readline.moveCursor(process.stdout, 0, -2)来修正位置。
内容的提问来源于stack exchange,提问作者Darkosphere
相关产品推荐
相关产品推荐

