[Express.js 에러] SyntaxError: Cannot use import statement outside a module

Seung Hyeon ·2023년 4월 30일
0

Issues

목록 보기
1/5

Git Merge 한 뒤 백엔드 서버를 실행했는데 아래와 같은 에러가 발생했다. "SyntaxError: Cannot use import statement outside a module"
Git merge 전에는 이런 에러가 발생하지 않았는데 왜 발생했지...

콘솔창을 자세히 보니 set "type": "module" package.json을 하란다. 즉 package.json파일에 "type": "module"을 추가로 입력해야한다는 뜻이다.
package.json파일에 "type": "module"을 추가하는 작업은 Node.js에서 ES모듈(import/export)을 적용하기 위해 필요한 작업이라고 한다.
(Git merge 전에는 "type": "module" 추가 없이 잘 작동했는데 갑자기 뭐지...)

package.json파일에 "type": "module"을 추가하고 다시 서버를 실행했더니 또다른 에러가 발생했다. "node:internal/process/esm_loader:94 internalBinding('errors').triggerUncaughtException"
이건 또 무슨 에러인가...
찾아보니, Node.js에서 import 키워드로 프로젝트 내부 모듈을 불러올 때는 반드시 확장자까지 포함해서 경로를 명시해줘야하는데, 명시하지 않았을 시 생기는 오류라 한다.
(예시) 실패 - import data from "./data" , 성공 - import data from "./data.js"

 

테스트로 하나 파일만 수정해보았다. 이 작업을 저 에러가 끝날 때까지 계속 해야하는 것 같다..
import한 모든 파일 경로에 확장자를 포함시켰더니 이번에는 Mongoose import 관련 에러가 떴다. import { Schema, model } from "mongoose";import pkg from 'mongoose'; const {Schema, model} = pkg로 바꿔야한다는 메세지가 떴다.

참고로 import { Schema, model } from "mongoose";는 express.js에서 연결한 MongoDB의 스키마를 mongoose 모듈을 이용해 정의할 수 있게 하는 코드이다.

수정하였더니 정상 실행되었다.

 

전체적으로 이런 에러들이 Common.js와 ES모듈과 관련있는 에러인 듯하다.
이 둘의 차이점은 나중에 따로 포스팅 해봐야겠다.

 


※ 참고글
https://www.daleseo.com/js-node-es-modules/
https://velog.io/@hackjoong/nodeinternalprocessesmloader94-internalBindingerrors.triggerUncaughtException

profile
안되어도 될 때까지

0개의 댓글