You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NodeJS中如何实现输入密码时不回显终端按键内容?

在Node.js中实现无回显的密码输入(替代prompt逻辑)

你可以通过两种方式实现类似sudo的无回显密码输入:使用Node.js原生模块,或者借助成熟的NPM包(更推荐后者,省心且兼容更多场景)。

方法一:用NPM包 inquirer(推荐)

inquirer是专门处理命令行交互的工具,不仅支持密码无回显,还能轻松扩展收集其他基础信息(比如用户名、配置路径等),非常适合首次启动的设置流程。

  1. 首先安装依赖:
npm install inquirer
  1. 替换原有代码:
const inquirer = require('inquirer');

console.log('Failed to find config file');

// 发起密码输入请求,完全无回显
inquirer.prompt([
  {
    type: 'password',
    name: 'password',
    message: 'Enter a password:',
    mask: '' // 设置为空字符串,实现完全无回显(默认会显示*)
  }
]).then((answers) => {
  const password = answers.password;
  // 在这里执行后续逻辑:保存配置、启动应用等
  console.log('密码已获取,即将启动应用'); // 仅作演示,实际可删除
});

如果需要同时收集其他信息(比如用户名),直接在prompt数组里加配置项即可:

inquirer.prompt([
  {
    type: 'input',
    name: 'username',
    message: 'Enter your username:'
  },
  {
    type: 'password',
    name: 'password',
    message: 'Enter a password:',
    mask: ''
  }
]).then((answers) => {
  console.log('收集到的信息:', answers);
  // 后续启动逻辑
});

方法二:Node.js原生实现(无需额外依赖)

如果不想装包,可以用Node.js内置的readline和tty模块手动控制终端回显:

const readline = require('readline');
const { stdin } = process;

console.log('Failed to find config file');

const rl = readline.createInterface({
  input: stdin,
  output: process.stdout
});

// 关闭终端回显
stdin.setRawMode(true);
process.stdout.write('Enter a password: ');

let password = '';

stdin.on('data', (char) => {
  char = char.toString();
  switch (char) {
    // 回车/换行提交输入
    case '\n':
    case '\r':
    // Ctrl+D 提交
    case '\u0004':
      stdin.setRawMode(false);
      process.stdout.write('\n');
      rl.close();
      // 处理密码
      console.log('密码已获取'); // 演示用
      break;
    // Ctrl+C 退出程序
    case '\u0003':
      process.exit(0);
      break;
    // 其他字符追加到密码,不回显
    default:
      password += char;
      break;
  }
});

这种方式需要自己处理各种终端事件(比如快捷键),适合对依赖体积有要求的场景。

内容的提问来源于stack exchange,提问作者Maddy Guthridge

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 17:09:25