From 96103039d8d20e01c0b102855699c94f25b8ec71 Mon Sep 17 00:00:00 2001 From: zhang1106 <849185023@qq.com> Date: Tue, 17 Mar 2026 16:50:16 +0800 Subject: [PATCH] =?UTF-8?q?fix(install.js):=20=E4=BF=AE=E5=A4=8D=E5=AF=86?= =?UTF-8?q?=E7=A0=81=E8=BE=93=E5=85=A5=E5=A4=84=E7=90=86=E5=B9=B6=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E9=94=99=E8=AF=AF=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- install.js | 44 +++++++++++++++++++++++++++++++------------- 1 file changed, 31 insertions(+), 13 deletions(-) diff --git a/install.js b/install.js index 0e9019d..1d1edf4 100644 --- a/install.js +++ b/install.js @@ -161,6 +161,15 @@ const rl = readline.createInterface({ output: process.stdout // 标准输出(屏幕) }); +rl.on('close', () => { + process.exit(0); +}); + +rl.on('error', (err) => { + log.error(`输入错误: ${err.message}`); + process.exit(1); +}); + /** * 提问函数 - 获取用户输入 * @@ -196,13 +205,15 @@ function askPassword(question) { let password = ''; const stdin = process.stdin; - const wasRaw = stdin.isRaw; - if (stdin.isTTY) { - stdin.setRawMode(true); - } - stdin.resume(); - stdin.setEncoding('utf8'); + const cleanup = () => { + if (stdin.isTTY) { + try { + stdin.setRawMode(false); + } catch {} + } + stdin.removeListener('data', onData); + }; const onData = (char) => { const c = char; @@ -211,28 +222,35 @@ function askPassword(question) { case '\n': case '\r': case '\u0004': - if (stdin.isTTY) { - stdin.setRawMode(wasRaw || false); - } - stdin.pause(); - stdin.removeListener('data', onData); + cleanup(); console.log(); resolve(password); break; case '\u0003': - process.exit(); + cleanup(); + console.log('\n已取消'); + process.exit(0); break; case '\u007F': case '\b': - password = password.slice(0, -1); + if (password.length > 0) { + password = password.slice(0, -1); + process.stdout.write('\b \b'); + } break; default: password += c; + process.stdout.write('*'); break; } }; + if (stdin.isTTY) { + stdin.setRawMode(true); + } + stdin.setEncoding('utf8'); stdin.on('data', onData); + stdin.resume(); }); }