개발/TypeScript

🫧TS:: TypeScript + PM2 배포하기(+PATH 에러 해결하기)

hyuunii 2023. 1. 17. 13:07

와...... 이것때문에 정말 너무 너무 너무 힘들었......... 삽질을 개많이했다 정말


~삽질 여정~

1. npm i -g pm2로 pm2 전역에 설치

 

 

2. pm2 start app.ts 했으나 에러 발생

Interpreter /usr/lib/node_modules/pm2/node_modules/.bin/ts-node is NOT AVAILABLE in PATH. (type 'which /usr/lib/node_modules/pm2/node_modules/.bin/ts-node' to double check.)

 

 

3. 현재 프로젝트에서 pm2 install typescript 했으나 다른 에러 발생

ENOTEMPTY: directory not empty, rename '/usr/lib/node_modules/pm2/node_modules/@pm2/pm2-version-check' -> '/usr/lib/node_modules/pm2/node_modules/@pm2/.pm2-version-check-IOUg7bY7'

 

 

4. 글로벌 말고 현재 프로젝트에서 npm i -d pm2로 pm2 다시 설치 시도하니까 npm timing 어쩌구 하면서 엄청난 라인들과 함께 암튼 뭐가 설치됨

 

5. 희망에 차서 다시 pm2 start app.ts했으나 2번과 똑같은 에러 발생

Interpreter /usr/lib/node_modules/pm2/node_modules/.bin/ts-node is NOT AVAILABLE in PATH. (type 'which /usr/lib/node_modules/pm2/node_modules/.bin/ts-node' to double check.)

 

 

6. interpreter option을 붙이기 시작함: pm2-dev --interpretor ./node_modules/.bin/ts-node app.ts

했으나 똑같은 에러.. 발생

Interpreter /usr/lib/node_modules/pm2/node_modules/.bin/ts-node is NOT AVAILABLE in PATH. (type 'which /usr/lib/node_modules/pm2/node_modules/.bin/ts-node' to double check.)

 

 

7. npx pm2 install typescript 했는데 설치가 되면서 동시에 에러가 같이 생김.....(?)

 

 

 

8. 어쨌든 뭐 설치가 된 것 같으니 다시 유유히 pm2 start app.ts 진ㅋ행ㅋ

오~~~ 서버가 켜졌다고 나옴

근데 pm2 log를 찍어보니 에러가 ;;;;;

TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts" for /home/ubuntu/SideProject01/app.ts

 

 

9. ts-node가 정상 작동을 안하고있는거라 판단. interpreter option을 주는 방향으로 찾아보기 시작.

근데 위에서 pm2-dev --interpretor ./node_modules/.bin/ts-node app.ts로 해본결과 안돼서.. pm2의 ecosystem.json파일을 만들기로 결정.

위의 방법 등등등 거의 수십번(ㅠㅠ 진짜임) 수정해가면서 pm2 start ecosystem.json을 시도해보았으나 결론은 fail....

아래처럼 pm2 서버 정상적으로 작동한다고 나오고, 로그에 에러조차 뜨지 않으나 사이트가 열리지 않음.

환경설정 값을 잘못 입력해준건지.. 뭔지 모르겠으나 어쨌든 fail T T

 

 

10. 이상했음. 분명히 interpreter 문제인 것 같았음. 그래서 옵션 줘서 다시 시도.

pm2 start app.ts --interpreter ./node_modules/.bin/ts-node 

했는데 서버 켜지고, 로그 찍어보니 또 파일 확장자 에러가 뜸.

TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts" for /home/ubuntu/SideProject01/app.

아무래도 옵션을 잘못 주고 있는 것 같단 예감이 들어서 구글링 구글링 구글링

 

 

11. Node.js에서 ES6 모듈을 쓰기 위해 package.json 파일에 "type" : "module"을 추가해놨었음.

혹시 그냥 단순한 ts-node로 돌리는게 아닌가? 싶어서 모듈을 열어봄.

아래처럼 ts-node, ts-node-esm 등등 하나가 아니었음.

그래서 ts-node 역시 esm으로 돌려야 하는 것 같다는 촉이 듦.

 

 

12. 혹시 혹시 혹시 하는 마음에 아래의 커맨드 라인을 실행

pm2 start app.ts --interpreter ./node_modules/.bin/ts-node-esm

 

그랬더니 아래처럼 서버 잘 켜지고

 

!!!!!!!스웨거도 켜지길래 로그인 실행!!!!!!!!

 

로그인 잘 되길래(하......) pm2 log 찍어보니

 

완벽하게 실행되고 토큰도 잘 찍혀나옴(코드에 console.log 찍어놓았음)..........


결론

1. pm2 현재 프로젝트에 설치(npm i -d pm2)

2. pm2 typescript도 현재 프로젝트에 설치((npx) npm i typescript)

3. pm2 start할때 본인이 사용하는 모듈에 맞게 interpreter option 똑바로 주기(pm2 start app.ts --interpreter ./node_modules/.bin/ts-node-esm)

 

 

너무 고생한 것 치고는 결론이 3줄....이라니. 당황스럽군. 여튼.

esm, 노드 모듈, ts-node 등등에 대해 더 자세히 알아봐야겠음.