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

如何使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 18:15:47