Nest Commander 시도
15286 단어 TypeScriptNestJSbatchtech
개시하다
독자 대상
Nest Commander란
콘솔 애플리케이션은
@Command
단위로 설치할 수 있습니다.@Command
내용에 따라 명령줄이 실행될 때 파라미터를 지정할 수 있습니다.@Command
를 관리할 수 있습니다.시작할 때 명령행 매개 변수로 실행할 것을 지정할 수 있습니다 @Command
.@Option
로 정의할 수 있다.NestJS 공식 Standalone 애플리케이션 페이지에는 NestJS를 사용하는 콘솔 애플리케이션에 대한 쓰기 방법이 기재되어 있습니다.이 방법으로 하면 여러 개의 컨트롤러 프로그램을 관리하려면monorepo화가 필요하다.Nest Commander의 경우 monorepo를 사용할 필요가 없습니다.
작업 환경
라이브러리 작업
작업 방침
@Command
@Command
에 명령행 파라미터를 통해 변수를 제공하고 변환샘플 코드
src/sample1.command.ts
import { Logger } from '@nestjs/common';
import { CommandRunner, Command, Option } from 'nest-commander';
/** コマンドライン引数で渡す変数の型管理 */
type CommandOptions = {
id?: number;
};
@Command({
// コマンドライン引数で`sample1`を指定することで起動可能
name: 'sample1',
// isDefault=true: コマンドライン引数を指定しない場合に起動できる。アプリケーション内で1つのみ指定可能
options: { isDefault: true },
})
export class Sample1Command implements CommandRunner {
/**
* --idの数字変換処理
* --id=数字を指定するとrunのoptions.idに値が設定される
*/
@Option({
flags: '--id [number]',
})
parseId(value: string): number {
return Number(value);
}
/**
* @Command.nameで呼び出された時に実行される処理
*/
async run(passedParams: string[], options?: CommandOptions): Promise<void> {
Logger.log({ passedParams, options }, Sample1Command.name);
return Promise.resolve();
}
}
src/sample2.command.tsimport { Logger } from '@nestjs/common';
import { CommandRunner, Command } from 'nest-commander';
@Command({
name: 'sample2',
})
export class Sample2Command implements CommandRunner {
/**
* @Command.nameで呼び出された時に実行される処理
*/
async run(passedParams: string[], options?: Record<string, unknown>): Promise<void> {
Logger.log({ passedParams, options }, Sample2Command.name);
return Promise.resolve();
}
}
src/app.module.tsimport { Module } from '@nestjs/common';
import { Sample1Command } from './sample1.command';
import { Sample2Command } from './sample2.command';
@Module({
imports: [],
// Sample1Command, Sample2Commandを指定する
providers: [Sample1Command, Sample2Command],
})
export class AppModule {}
src/main.tsimport { CommandFactory } from 'nest-commander';
import { AppModule } from './app.module';
async function bootstrap() {
// nest-commanderのCommandFactoryにAppModuleを指定する
// 出力されるログレベルを指定する(標準だとログ出力されないため)
await CommandFactory.run(AppModule, ['warn', 'error', 'debug', 'log']);
}
bootstrap();
동작 확인
# Sample1Command実行(デフォルトCommand)
node dist/main --id=123
node dist/main sample1 --id=123
# Sample2Command実行
node dist/main sample2
소스 코드 세트
끝말
Sub Commands도 만들 수 있는데 CLI 스타일의 물건을 만들고 싶을 때 한번 해보고 싶어요.
참조 링크
Reference
이 문제에 관하여(Nest Commander 시도), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/kakkoyakakko/articles/300539eac560bc텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)