본문 바로가기

웹/Nest

[Nest] Nest.v10 출시 / nest 에서 swc(Speedy Web Compiler) 적용하기

Nest의 버전 10이 공개되었습니다.

NestJS v10 is now available - Trilon Consulting

 

특징

  • swc를 적용할 수 있다
  • redis에 wildcard를 적용할 수 있다.
  • cachmodule 분리
    • @nestjs/common package에서 @nestjs/cache-manager 패키지로 분할되었다고 합니다.
  • node12이하에서 지원 중지
  • nest-cli 플러그인 typescript 4.8이상에서만 동작

저는 swc를 기존 nest.v9에 적용 해보았습니다.

마이그레이션 하는법 공식문서

 

nest 에서 swc 적용하기

nest v10으로 버전업 되면서 swc라는 rust 기반의 컴파일러를 사용할 수 있다고 들었습니다. 좀더 빠른 빌드를 위해 nest에 swc 컴파일러를 도입해보았습니다.

마이그레이션을 하고 오면 npm i @swc/cli @swc/core 를 따로 설치해주셔야 합니다.

 

1. nest-cli 컴파일 옵션 변경하기

nest-cli.json

{
  "$schema": "<https://json.schemastore.org/nest-cli>",
  "collection": "@nestjs/schematics",
  "sourceRoot": "src",
  "compilerOptions": {
    "builder": "swc",
    "typeCheck": true
  }
}

cli에 comilerOptions의 builder를 swc로 정합니다.

 

2. 테이블들의 option 변경하기

애플리케이션에서 TypeORM/MikroORM 또는 다른 ORM을 사용하는 경우 import 문제가 발생할 수 있습니다.

SWC는 순환 가져오기를 잘 처리하지 못하므로 다음 해결 방법을 사용해야 합니다

ex)

@Entity()
export class User {
  @OneToOne(() => Profile, (profile) => profile.user)
  profile: Relation<Profile>; // <--- see "Relation<>" type here instead of just "Profile"
}

각 연관관계에다가 전부다 Relation<> 탬플릿을 박아줍니다. 그리고 ts 파일에서 import 할 때 상대경로로 작성해줍니다.

Relation은 Typeorm 패키지 안에 있습니다.

이렇게 하면 속성 메타데이터의 트랜스파일된 코드에 속성 유형이 저장되지 않으므로 순환 종속성 문제를 방지할 수 있습니다.

ORM에서 유사한 해결 방법을 제공하지 않는 경우 래퍼 유형을 직접 정의할 수 있습니다:

/**
 * Wrapper type used to circumvent ESM modules circular dependency issue
 * caused by reflection metadata saving the type of the property.
 */
export type WrapperType<T> = T; // WrapperType === Relation

 

참고

728x90