refactor(install.js): 优化密码输入处理逻辑

This commit is contained in:
zhang1106
2026-03-18 08:52:44 +08:00
parent 96103039d8
commit 195d90e138
+17 -21
View File
@@ -205,6 +205,7 @@ function askPassword(question) {
let password = ''; let password = '';
const stdin = process.stdin; const stdin = process.stdin;
const stdout = process.stdout;
const cleanup = () => { const cleanup = () => {
if (stdin.isTTY) { if (stdin.isTTY) {
@@ -216,41 +217,36 @@ function askPassword(question) {
}; };
const onData = (char) => { const onData = (char) => {
const c = char; const code = char.charCodeAt(0);
switch (c) { if (code === 10 || code === 13) {
case '\n':
case '\r':
case '\u0004':
cleanup(); cleanup();
console.log(); stdout.write('\n');
resolve(password); resolve(password);
break; } else if (code === 3) {
case '\u0003':
cleanup(); cleanup();
console.log('\n已取消'); stdout.write('\n已取消\n');
process.exit(0); process.exit(0);
break; } else if (code === 127 || code === 8) {
case '\u007F':
case '\b':
if (password.length > 0) { if (password.length > 0) {
password = password.slice(0, -1); password = password.slice(0, -1);
process.stdout.write('\b \b'); stdout.write('\b \b');
} }
break; } else if (code >= 32) {
default: password += char;
password += c; stdout.write('*');
process.stdout.write('*');
break;
} }
}; };
if (stdin.isTTY) { if (stdin.isTTY) {
stdin.setRawMode(true); stdin.setRawMode(true);
}
stdin.setEncoding('utf8');
stdin.on('data', onData);
stdin.resume(); stdin.resume();
stdin.on('data', onData);
} else {
rl.question('', (answer) => {
resolve(answer.trim());
});
}
}); });
} }