CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
Node.js 进阶/课时/Inquirer 与 prompts
RawBlame
课时目录12 节

Node.js 进阶

  1. 01Node 进阶概览
  2. 02EventEmitter
  3. 03错误类型与处理
  4. 04语义化版本
  5. 05创建与发布包
  6. 06命令行应用
  7. 07Inquirer 与 prompts
  8. 08chokidar 与热重载
  9. 09模板引擎
  10. 10Node 与数据库
  11. 11glob 与文件模式
  12. 12综合练习

Inquirer 与 prompts

交互式 CLI 输入。

25 分钟

Inquirer 与 prompts

非交互脚本用 flag 即可(nva-cli);面向人的向导 需要列表选择、确认、密码输入——Inquirer 与 prompts 是 Node CLI 常用方案。

学习目标

  • 用 prompts 实现 confirm、select、text 交互
  • 区分「CI 无 TTY」与本地交互降级策略
  • 与 nva-errors 的用户错误提示配合

prompts 快速上手

import prompts from "prompts";

const answers = await prompts([
  {
    type: "text",
    name: "table",
    message: "PostgreSQL 表名",
    validate: (v) => (v ? true : "不能为空"),
  },
  {
    type: "confirm",
    name: "dryRun",
    message: "仅预览不写库?",
    initial: true,
  },
]);

if (!answers.table) process.exit(2); // 用户 Ctrl+C

轻量、Promise 友好;适合 nva-practice 的 import 向导。

Inquirer(经典栈)

import inquirer from "inquirer";

const { driver } = await inquirer.prompt([
  {
    type: "list",
    name: "driver",
    message: "数据源",
    choices: ["postgres", "mongodb"],
  },
]);

生态大、插件多;新项目可优先 prompts(体积小),团队已有 Inquirer 则保持一致。

CI 与 non-TTY

const isTTY = process.stdin.isTTY && process.stdout.isTTY;

if (!isTTY) {
  // 必须从 env 或 argv 读取,禁止 hang 在 prompt
  const table = process.env.IMPORT_TABLE;
  if (!table) throw new UserError("非交互模式需设置 IMPORT_TABLE");
}

GitHub Actions 跑 CLI 时 永远提供 flag/env,交互仅本地开发——与 testing-essentials CI 场景一致。

选型对照

库特点
prompts小、现代、默认 ESM
inquirer成熟、插件多
@clack/prompts美观 spinner、步骤 UI

框架层无对应物;Nest 管理端用 HTTP 表单,CLI 工具仍用本课库。

与数据库 track 衔接

交互选择 postgres 时,后续连接串读取 DATABASE_URL(见 pg-install);选 mongodb 则读 MONGODB_URI(mongo-install)。——用 env 或 ()。

不要把密码写进 shell history
.env
node-env

练习

  • 写三步 wizard:选库 → 确认 dry-run → 输入文件名
  • 加 CI=true 时跳过 prompt 的分支
  • 非法输入时展示友好 message,exit 2

小结

本地问用户,CI 靠 env——交互 CLI 的两条路径。 下一课 chokidar 与开发时热重载。

加载本节练习…
← 上一课命令行应用下一课 →chokidar 与热重载