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

This commit is contained in:
zhang1106
2026-03-18 15:03:39 +08:00
parent 87c9145f5f
commit f5eb1dbf8e
+14 -28
View File
@@ -200,54 +200,40 @@ function ask(question, defaultValue = '') {
*/ */
function askPassword(question) { function askPassword(question) {
return new Promise((resolve) => { return new Promise((resolve) => {
const prompt = `${question}: `; process.stdout.write(`${question}: `);
process.stdout.write(prompt);
let password = ''; let password = '';
const stdin = process.stdin; const wasRaw = process.stdin.isRaw;
const stdout = process.stdout;
const cleanup = () => { process.stdin.setRawMode(true);
if (stdin.isTTY) { process.stdin.resume();
try { process.stdin.setEncoding('utf8');
stdin.setRawMode(false);
} catch {}
}
stdin.removeListener('data', onData);
};
const onData = (data) => { const onData = (data) => {
const char = data.toString(); const char = data.toString();
const code = char.charCodeAt(0); const code = char.charCodeAt(0);
if (code === 10 || code === 13) { if (code === 10 || code === 13) {
cleanup(); process.stdin.setRawMode(wasRaw || false);
stdout.write('\n'); process.stdin.removeListener('data', onData);
process.stdout.write('\n');
resolve(password); resolve(password);
} else if (code === 3) { } else if (code === 3) {
cleanup(); process.stdin.setRawMode(wasRaw || false);
stdout.write('\n已取消\n'); process.stdout.write('\n已取消\n');
process.exit(0); process.exit(0);
} else if (code === 127 || code === 8) { } else if (code === 127 || code === 8) {
if (password.length > 0) { if (password.length > 0) {
password = password.slice(0, -1); password = password.slice(0, -1);
stdout.write('\b \b'); process.stdout.write('\b \b');
} }
} else if (code >= 32) { } else if (code >= 32 && code < 127) {
password += char; password += char;
stdout.write('*'); process.stdout.write('*');
} }
}; };
if (stdin.isTTY) { process.stdin.on('data', onData);
stdin.setRawMode(true);
stdin.resume();
stdin.on('data', onData);
} else {
rl.question('', (answer) => {
resolve(answer.trim());
});
}
}); });
} }