如何使用NestJS构建CLI工具?求实例或实现方案
用NestJS构建CLI工具的实现方法
NestJS官方文档没有专门的CLI构建示例,但可以结合它的依赖注入生态和Commander.js(Nest自身CLI也基于此)实现,步骤如下:
初始化Nest项目(已有项目可跳过):
nest new nest-cli-demo cd nest-cli-demo安装Commander依赖:
npm install commander创建CLI专用模块与服务:
先实现处理命令逻辑的服务:// src/cli/cli.service.ts import { Injectable } from '@nestjs/common'; @Injectable() export class CliService { greet(name?: string) { console.log(`Hello, ${name ?? 'Stranger'}!`); } addNumbers(a: number, b: number) { console.log(`Sum: ${a + b}`); } }再创建对应的模块:
// src/cli/cli.module.ts import { Module } from '@nestjs/common'; import { CliService } from './cli.service'; @Module({ providers: [CliService], exports: [CliService], }) export class CliModule {}编写CLI入口文件:
通过NestFactory.createApplicationContext启动Nest容器(无需HTTP服务),结合Commander定义命令:// src/cli/main.cli.ts import { NestFactory } from '@nestjs/core'; import { CliModule } from './cli.module'; import { CliService } from './cli.service'; import { program } from 'commander'; async function bootstrap() { const appContext = await NestFactory.createApplicationContext(CliModule); const cliService = appContext.get(CliService); // 定义greet命令 program .command('greet [name]') .description('Send a greeting message') .action((name) => { cliService.greet(name); appContext.close(); }); // 定义add命令 program .command('add <num1> <num2>') .description('Calculate sum of two numbers') .action((num1, num2) => { cliService.addNumbers(parseInt(num1), parseInt(num2)); appContext.close(); }); await program.parseAsync(process.argv); } bootstrap();配置运行脚本:
在package.json的scripts中添加:"scripts": { // ...其他脚本 "cli": "ts-node src/cli/main.cli.ts" }测试CLI命令:
# 测试greet命令 npm run cli greet John # 输出:Hello, John! # 测试add命令 npm run cli add 10 20 # 输出:Sum: 30
这种方式能复用NestJS的依赖注入、模块组织特性,让CLI工具和后端服务共享代码逻辑(比如数据库操作、业务服务等)。
内容的提问来源于stack exchange,提问作者Krish909
相关产品推荐
相关产品推荐

