覆盖应用程序的readline接口的_writeToOutput:https
:
//github.com/nodejs/node/blob/v9.5.0/lib/readline.js#L291
要隐藏密码输入,可以使用:
第一个解决方案:“密码:[=-]”
按下触摸时此解决方案具有动画:
password : [-=]password : [=-]
代码 :
var readline = require('readline');var rl = readline.createInterface({ input: process.stdin, output: process.stdout});rl.stdoutMuted = true;rl.query = "Password : ";rl.question(rl.query, function(password) { console.log('nPassword is ' + password); rl.close();});rl._writeToOutput = function _writeToOutput(stringToWrite) { if (rl.stdoutMuted) rl.output.write("x1B[2Kx1B[200D"+rl.query+"["+((rl.line.length%2==1)?"=-":"-=")+"]"); else rl.output.write(stringToWrite);};此序列“ x1B [2K x1BD”使用两个转义序列:
- Esc [2K:清除整行。
- Esc D:将窗口向上移动/滚动一行。
要了解更多信息,请阅读:http :
//ascii-table.com/ansi-escape-sequences-vt-100.php
第二解决方案:“密码:****”
var readline = require('readline');var rl = readline.createInterface({ input: process.stdin, output: process.stdout});rl.stdoutMuted = true;rl.question('Password: ', function(password) { console.log('nPassword is ' + password); rl.close();});rl._writeToOutput = function _writeToOutput(stringToWrite) { if (rl.stdoutMuted) rl.output.write("*"); else rl.output.write(stringToWrite);};您可以使用以下方式清除历史记录:
rl.history = rl.history.slice(1);



