개발하자
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!
반응형