From f5eb1dbf8e367773121ef45cdb43691e9fbd7e7b Mon Sep 17 00:00:00 2001 From: zhang1106 <849185023@qq.com> Date: Wed, 18 Mar 2026 15:03:39 +0800 Subject: [PATCH] =?UTF-8?q?refactor(install.js):=20=E7=AE=80=E5=8C=96?= =?UTF-8?q?=E5=AF=86=E7=A0=81=E8=BE=93=E5=85=A5=E5=A4=84=E7=90=86=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- install.js | 42 ++++++++++++++---------------------------- 1 file changed, 14 insertions(+), 28 deletions(-) diff --git a/install.js b/install.js index b382841..c2c1152 100644 --- a/install.js +++ b/install.js @@ -200,54 +200,40 @@ function ask(question, defaultValue = '') { */ function askPassword(question) { return new Promise((resolve) => { - const prompt = `${question}: `; - process.stdout.write(prompt); + process.stdout.write(`${question}: `); let password = ''; - const stdin = process.stdin; - const stdout = process.stdout; + const wasRaw = process.stdin.isRaw; - const cleanup = () => { - if (stdin.isTTY) { - try { - stdin.setRawMode(false); - } catch {} - } - stdin.removeListener('data', onData); - }; + process.stdin.setRawMode(true); + process.stdin.resume(); + process.stdin.setEncoding('utf8'); const onData = (data) => { const char = data.toString(); const code = char.charCodeAt(0); if (code === 10 || code === 13) { - cleanup(); - stdout.write('\n'); + process.stdin.setRawMode(wasRaw || false); + process.stdin.removeListener('data', onData); + process.stdout.write('\n'); resolve(password); } else if (code === 3) { - cleanup(); - stdout.write('\n已取消\n'); + process.stdin.setRawMode(wasRaw || false); + process.stdout.write('\n已取消\n'); process.exit(0); } else if (code === 127 || code === 8) { if (password.length > 0) { 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; - stdout.write('*'); + process.stdout.write('*'); } }; - if (stdin.isTTY) { - stdin.setRawMode(true); - stdin.resume(); - stdin.on('data', onData); - } else { - rl.question('', (answer) => { - resolve(answer.trim()); - }); - } + process.stdin.on('data', onData); }); }