반응형
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!
반응형
'개발하자' 카테고리의 다른 글
Svelte의 구독 스토어에서 값 변경이 있을 때 기능을 트리거하는 방법은 무엇입니까? (0) | 2023.01.01 |
---|---|
어떻게 하면 쿠버네티스가 이미지를 다시 끌어오도록 할 수 있을까요? (0) | 2022.12.31 |
테라폼이 "이미 존재하는" 모든 리소스를 자동으로 가져오도록 하는 방법은 무엇입니까? (0) | 2022.12.30 |
EOS 열 프린터가 Flutter 프레임워크를 사용할 때 아랍어 문자를 제대로 인쇄하지 않음 (0) | 2022.12.30 |
웹용 Flatter Build - "응용 프로그램을 컴파일하지 못했습니다." (0) | 2022.12.29 |