해결된 질문
작성
·
176
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
"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"
},
조금 더 찾아보니 해결을 하기는 했는데 이게 정확한 방법인지는 모르겠습니다..
일단 해당 오류가 발생했던 가장 큰 이유는 해당 버전의 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로 컴파일 해야 하기 때문입니다.
해당 내용으로 최대한 빨리 강좌를 업데이트 하도록 하겠습니다.
감사합니다.
혹시 package.json 을 강의처럼 설정하면 오류가 발생하나요??
오류 나는 코드결과물를 메일로 보내주시면 확인해 보도록 하겠습니다
메일: freeseamew@gmail.com
그리고 일단 외부에 있어서 17일 밤이나 18일까지 확인하고 답변드리겠습니다