개발하자

pm2를 사용하여 tsconfig-paths로 typescript 빌드 실행

Cuire 2022. 12. 31. 08:29
반응형

pm2를 사용하여 tsconfig-paths로 typescript 빌드 실행

운영 중인 tsconfig-paths로 typescript의 빌드(.js 파일)를 실행하려고 합니다. 경로로 typescript를 실행하는 데 문제가 없습니다. pm2로 빌드 온 프로덕션을 실행할 때만.

시도해 봤습니다.

apps: [
{
  name: 'app',
  script: './dist/index.js',
  node_args: '-r ts-node/register -r tsconfig-paths/register',
},

],




TLDR: 만약 당신이 tsconfig에 대한 *일반적인 오해* 정보를 실행한다고 가정한다면, 당신은 다음을 시도할 수 있습니다.

{
  apps: [
  {
    name: 'app',
    script: './dist/index.js',
    node_args: '-r ts-node/register -r tsconfig-paths/register',
    env: {
      "TS_NODE_BASEURL": "./dist"
    }
  },
}

설명:

Typescript를 사용하면 경로 별칭을 지정할 수 있으므로 이와 같은 추악한 상대 경로를 사용할 필요가 없습니다. 일반적으로 이 기능을 사용하려면 다음과 같이 해야 합니다.

...
  "outDir": "./dist",
  "baseUrl": "./src", /* if your code sits in the /src directory */
   "paths": {
     "@/*": ["*"]
   }, 
...

이제 다음 작업을 수행할 수 있습니다.

import config from "@/config";

오류 없이 컴파일됩니다. 컴파일하는 동안 요청된 모듈은 디렉토리에 있습니다. 그러나:

$ node -r tsconfig-paths/register dist/index.js
Failure! Cannot find module '@/config'

왜 그런 것일까요? 런타임에 구성은 더 이상 내부에 배치되지 않고 대신 에서 찾을 수 있기 때문입니다.

그럼 이걸 어떻게 처리해야 할까요? 다행히 tsconfig-paths를 사용하면 baseUrl을 env로 재정의할 수 있습니다.

$ TS_NODE_BASEURL=./dist node -r tsconfig-paths/register dist/index.js
Success! 

반응형