TypeScript CLI 框架:打造强大的控制台应用
现代 TypeScript 开发离不开命令行工具 (CLI) 的创建。无论是项目构建器、代码生成器还是自动化工具——每位开发者都曾考虑过编写自己的控制台程序。本文将详细解析最佳的 TypeScript CLI 框架、它们的特点,并提供实用的代码示例。
为什么需要 CLI 框架?
“从零开始”编写 CLI 不仅涉及命令行参数处理,还包括子命令管理、输入验证、彩色输出和交互式提示。框架承担了这些繁琐工作,让您能专注于业务逻辑。TypeScript 提供了严格的类型检查,这在开发复杂的控制台应用时尤为宝贵。
TypeScript 的四大 CLI 框架
1. Commander.js
最流行的框架(每周下载量超过 3000 万次)。非常适合创建具有子命令、选项和自动生成帮助文档的复杂多层 CLI。
安装:
npm install commander基础应用示例:
import { Command } from 'commander';
const program = new Command();
program .name('greet') .description('用于问候的 CLI') .version('1.0.0');
program .command('hello') .argument('<name>', '用户名') .option('-l, --lang <lang>', '问候语言', 'ru') .action((name, options) => { const greetings: Record<string, string> = { ru: 'Привет', en: 'Hello', de: 'Hallo' }; const greeting = greetings[options.lang] || greetings.ru; console.log(`${greeting}, ${name}!`); });
program.parse();运行:
npx ts-node index.ts hello Иван --lang en# 输出:Hello, Иван!2. Inquirer.js
用于在终端中创建交互式提示的库。支持提问、选项选择、密码输入等多种功能。与 Commander 配合使用效果极佳。
安装:
npm install inquirer @types/inquirer交互式调查示例:
import inquirer from 'inquirer';
interface Answers { name: string; role: string; experience: number;}
async function main() { const answers: Answers = await inquirer.prompt([ { type: 'input', name: 'name', message: '您叫什么名字?', validate: (input: string) => input.length > 0 || '姓名不能为空' }, { type: 'list', name: 'role', message: '您的角色?', choices: ['Frontend', 'Backend', 'Fullstack', 'DevOps'] }, { type: 'number', name: 'experience', message: '经验年限?', default: 1 } ]);
console.log(`✅ ${answers.name},您是 ${answers.role},拥有 ${answers.experience} 年经验。`);}
main();3. Clack
来自 Astro 创建者的现代框架。以极简 API、精美动画和开箱即用的 TypeScript 支持著称。非常适合快速原型开发。
安装:
npm install @clack/prompts颜色选择示例:
import * as clack from '@clack/prompts';
async function main() { clack.intro('选择颜色');
const color = await clack.select({ message: '选择您喜欢的颜色:', options: [ { value: 'red', label: '红色' }, { value: 'green', label: '绿色' }, { value: 'blue', label: '蓝色' } ] });
clack.note(`您选择了:${color}`); clack.outro('感谢您的选择!');}
main();4. Yargs
强大的参数解析器