실행 스크립트를 단순화해보자

NestJS에서 monorepo를 개별적으로 실행할 때에는 실행 명령어가 조금 달라지게 된다. 이 때 마다 실행 명령어를 만들기가 너무 싫어서 하나의 명령어로 실행할 수 있도록 해보자

목표

  • 빌드하기, 개발모드 실행하기, 운영모드 실행하기로 각각 명령어를 하나씩 만들어보자
  • 서비스가 늘어나도 명령어는 변함이 없도록 해보자
  • 서비스가 없으면 에러가 나오도록 해보자
{
  "scripts": {
    "app-checker": "[ ! -d apps/$app/src ] && echo \"not exists app.\" && exit 1 || exit 0",
    "build": "app=$app pnpm app-checker && nest build $app",
    "run:dev": "app=$app pnpm app-checker && nest start -w -d --sourceRoot apps/$app/src $app",
    "run:prod": "app=$app pnpm app-checker && node dist/apps/$app/main"
  }
}

실행해보기

여기서는 pnpm을 사용한다.

# 서비스 생성
$ nest g app svc

# 대상 서비스 없이 실행
$ pnpm run:dev
...
not exists app.
 ELIFECYCLE  Command failed with exit code 1.
 ELIFECYCLE  Command failed with exit code 1.

# 없는 서비스 실행
$ app=noapp pnpm run:dev
...
not exists app.
 ELIFECYCLE  Command failed with exit code 1.
 ELIFECYCLE  Command failed with exit code 1.

# 새로 만든 서비스 실행
$ app=svc pnpm run:dev
...
 Info  Webpack is building your sources...

webpack 5.87.0 compiled successfully in 217 ms
Debugger listening on ws://127.0.0.1:9229/6e146f57-30e7-47bd-aad0-42fa97b7f3da
For help, see: https://nodejs.org/en/docs/inspector
Type-checking in progress...
[Nest] 39172  - 08/09/2023, 11:29:23 AM     LOG [NestFactory] Starting Nest application...
[Nest] 39172  - 08/09/2023, 11:29:23 AM     LOG [InstanceLoader] GrpcClientModule dependencies initialized +7ms
[Nest] 39172  - 08/09/2023, 11:29:23 AM     LOG [RoutesResolver] GrpcClientController {/}: +8ms
[Nest] 39172  - 08/09/2023, 11:29:23 AM     LOG [RouterExplorer] Mapped {/, GET} route +1ms
[Nest] 39172  - 08/09/2023, 11:29:23 AM     LOG [NestApplication] Nest application successfully started +1ms
No errors found.