diff --git a/install.js b/install.js index c2c1152..724d24f 100644 --- a/install.js +++ b/install.js @@ -190,50 +190,39 @@ function ask(question, defaultValue = '') { } /** - * 密码输入函数 - 隐藏输入内容 + * 密码输入函数 - 隐藏输入内容并显示星号 * * @param {string} question - 提示问题文本 + * @param {boolean} requireConfirm - 是否需要确认密码 * @returns {Promise} 用户输入的密码 * * 使用示例: * const password = await askPassword('请输入密码'); + * const password = await askPassword('请输入密码', true); // 需要确认 */ -function askPassword(question) { +function askPassword(question, requireConfirm = false) { return new Promise((resolve) => { - process.stdout.write(`${question}: `); + const rl2 = readline.createInterface({ + input: process.stdin, + output: process.stdout + }); - let password = ''; - const wasRaw = process.stdin.isRaw; - - 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) { - process.stdin.setRawMode(wasRaw || false); - process.stdin.removeListener('data', onData); - process.stdout.write('\n'); - resolve(password); - } else if (code === 3) { - 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); - process.stdout.write('\b \b'); - } - } else if (code >= 32 && code < 127) { - password += char; - process.stdout.write('*'); + rl2.question(`${question}: `, { silent: true }, (password1) => { + if (requireConfirm) { + rl2.question('请再次输入密码确认: `, { silent: true }, (password2) => { + rl2.close(); + if (password1 === password2) { + resolve(password1); + } else { + log.error('两次输入的密码不一致,请重新输入'); + resolve(askPassword(question, requireConfirm)); + } + }); + } else { + rl2.close(); + resolve(password1); } - }; - - process.stdin.on('data', onData); + }); }); }