• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

TypeError 관련하여 문의드립니다.

24.03.16 20:31 작성 조회수 106

0

안녕하세요. TypeError 관련하여 문의드립니다.

강의 회차는 Fastify 기본 설정입니다.

먼저 아래는 제가 실습하는 환경입니다.

Mac OS Ventura
Node Version : v18.19.1
NPM Version : 10.2.4

 

아래는 오류에 대한 내용입니다.

TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts" for /Users/jiyong/Desktop/Stater-Kit/src/main.ts
    at new NodeError (node:internal/errors:405:5)
    at Object.getFileProtocolModuleFormat [as file:] (node:internal/modules/esm/get_format:136:11)
    at defaultGetFormat (node:internal/modules/esm/get_format:182:36)
    at defaultLoad (node:internal/modules/esm/load:101:20)
    at nextLoad (node:internal/modules/esm/hooks:864:28)
    at load (/Users/jiyong/Desktop/Stater-Kit/node_modules/ts-node/dist/child/child-loader.js:19:122)
    at nextLoad (node:internal/modules/esm/hooks:864:28)
    at Hooks.load (node:internal/modules/esm/hooks:447:26)
    at MessagePort.handleMessage (node:internal/modules/esm/worker:196:24)
    at [nodejs.internal.kHybridDispatch] (node:internal/event_target:786:20) {
  code: 'ERR_UNKNOWN_FILE_EXTENSION'
}
[nodemon] app crashed - waiting for file changes before starting...


이미 커뮤니티에 해당 오류와 관련하여 질문이 있길레 강사님이 답변하신 부분을 보고 체크해봤지만 제 코드상 잘못된 부분을 못찾겠더라구요

그래서 Google Drive에 올려놓으신 fastify-init.zip을 통하여 진행해보았지만 같은 오류가 뜹니다.

해결 방법을 알 수 있을까요 ?

답변 1

답변을 작성해보세요.

0

Syno님의 프로필

Syno

질문자

2024.03.16

"scripts": {
  "start:build": "tsc -w --project tsconfig.json && npx -p tsconfig.json",
  "build:live": "nodemon --exec node --loader ts-node/esm src/main.ts --verbose",
  "start": "npm run build:live"
},


조금 더 찾아보니 해결을 하기는 했는데 이게 정확한 방법인지는 모르겠습니다..

혹시 package.json 을 강의처럼 설정하면 오류가 발생하나요??

오류 나는 코드결과물를 메일로 보내주시면 확인해 보도록 하겠습니다

메일: freeseamew@gmail.com

 

그리고 일단 외부에 있어서 17일 밤이나 18일까지 확인하고 답변드리겠습니다

Syno님의 프로필

Syno

질문자

2024.03.17

넵 ! 방금 다시 한번 정리하여 메일로 전달드렸습니다.

확인 후 답변 부탁드립니다. 감사합니다 !

일단 해당 오류가 발생했던 가장 큰 이유는 해당 버전의 nodejs에서 ts-node가 해당 명령어로 더이상 정상 작동 하지 않아서 발생했던 것 같습니다.

제가 강좌를 만들 때 사용했던 버전은 18.12.1 이었고, 그 이후 18버전 및 20버전에서는 강좌에서 작성한 방법으로는 ts-node로 서비스가 구동되지 않는 것을 확인했습니다.

그리고 이후 버전부터는 ts-node를 esm과 실행하기 위해서는 node --loader ts-node/esm 를 추가하고 작동하는 것을 저도 확인했습니다.

nodemon, ts-node 그리고 esm을 함께 사용하는 것에서는 아직까지 조금 불안전한 면들이 남아있어 node 버전이 변경될 경우 이처럼 문제가 발생할 수 있는 것 같습니다.

만약 개발시 ts-node를 사용하는 것이 조금 꺼림직할 경우 다음과 같이 tsx를 설치하고,

npm i -D tsx

설치한 tsx를 이용해서 실행시키는 것도 괜찮은 방법입니다.

  "scripts": {
    "start:build": "tsc -w --project tsconfig.json && npx -p tsconfig.json",
    "build:live": "npx tsx src/main.ts",
    "start": "npm run build:live"
  },

다만 이렇게 할 경우 실행에는 문제가 없겠지만 코드를 수정할 경우 꼭 서버를 새로 실행시켜야 하는 약간의 번거러움은 있습니다.

그리고 이부분은 실제 개발된 서버를 배포하는 것에는 영향을 주는 부분은 아닙니다. typescript로 작성된 코드는 배포시에는 꼭 javascript로 컴파일 해야 하기 때문입니다.

해당 내용으로 최대한 빨리 강좌를 업데이트 하도록 하겠습니다.

감사합니다.

Syno님의 프로필

Syno

질문자

2024.03.18

감사합니다.
답변 부분 읽고 나서 드디어 궁금증이 해결되었네요.
새롭게 배워가는 부분들이 많아 좋습니다 😀

좋은 강의 내주셔서 다시 한번 감사합니다.