【问题标题】:How to create and use a terminal command with nest-commander?如何使用 nest-commander 创建和使用终端命令?
【发布时间】:2022-08-17 15:46:19
【问题描述】:

所以,我有这个 NestJS 项目,出于学习目的,我想创建一个带有nest-commander 的命令,该命令可以在终端上执行(这样我可以从其他服务调用函数),也用于学习目的,每当我调用它时命令,它应该调用从数据库中获取用户的服务文件上的函数。

它看起来像这样:

> run myCommand -username UsernameString

每当从终端调用该命令时,我都会从AnotherService 调用getUser() 来查找具有该特定UsernameString 的用户。 我阅读了文档并无法理解它,所以......

  1. 如何从终端调用命令?
  2. 是否可以在应用程序中调用相同的命令?
  • 您链接的教程非常简单,什么不起作用?至于从应用程序中执行命令,是的 - 但您需要在 ci 和应用程序都可以包含的其他文件中创建命令,并调用相同的代码处理 @Command 和应用程序部分,就像准备给定参数的用户界面一样来自不同的来源并最终执行相同的代码。
  • 它使用crun run 运行命令,但是当我尝试使用crun 时,它无法识别命令!
  • 文档说现在,我们只假设这个应用程序在crun 名称下全局安装。
  • 谢谢!但在这种情况下,node ./dist/main [args] [options] 运行这个命令会伤\'不只是运行我的应用程序吗? (它只是做了,但我可能有点愚蠢,抱歉),比如:node ./dist/main sayHello 只需运行我的应用程序

标签: javascript node.js typescript nestjs node-commander


【解决方案1】:

所以基本上如果我们举这个例子:

import { Module } from '@nestjs/common';
import { Command, CommandFactory, CommandRunner, Option } from 'nest-commander';

interface BasicCommandOptions {
  string?: string;
  boolean?: boolean;
  number?: number;
}

@Command({ name: 'basic', description: 'A parameter parse' })
export class BasicCommand extends CommandRunner {
  async run(
    passedParam: string[],
    options?: BasicCommandOptions,
  ): Promise<void> {
    if (options?.number) {
      this.runWithNumber(passedParam, options.number);
    } else if (options?.string) {
      this.runWithString(passedParam, options.string);
    } else {
      this.runWithNone(passedParam);
    }
  }

  @Option({
    flags: '-n, --number [number]',
    description: 'A basic number parser',
  })
  parseNumber(val: string): number {
    return Number(val);
  }

  @Option({
    flags: '-s, --string [string]',
    description: 'A string return',
  })
  parseString(val: string): string {
    return val;
  }

  @Option({
    flags: '-b, --boolean [boolean]',
    description: 'A boolean parser',
  })
  parseBoolean(val: string): boolean {
    return JSON.parse(val);
  }

  runWithString(param: string[], option: string): void {
    console.log({ param, string: option });
  }

  runWithNumber(param: string[], option: number): void {
    console.log({ param, number: option });
  }

  runWithNone(param: string[]): void {
    console.log({ param });
  }
}

@Module({
  providers: [BasicCommand],
})
export class AppModule {}

async function bootstrap() {
  await CommandFactory.run(AppModule);
}

bootstrap();

您可以使用该方法运行它:

ts-node ./test.ts basic -s test-value -n 1234

首先,您调用命令的名称,然后调用参数

【讨论】:

    猜你喜欢
    • 2023-01-18
    • 1970-01-01
    • 2020-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-27
    相关资源
    最近更新 更多