JS.TS

JS 모듈 (CommonJS 모듈 / ES 모듈)

mmalmmizal 2024. 6. 26. 16:00

CommonJS 

문법 :  require() 함수, module.exports 객체 사용 

로딩 방식 : 동기적 로딩

스코프 : 모듈은 전역 스코프에서 실행 

단일 인스턴스 : 모듈은 기본적으로 한 번만 로드되며, 같은 모듈을 여러 곳에서 require() 해도 동일한 인스턴스 사용.

ES모듈 (ECMAScript)

문법 : import 문, export 키워드 사용 

로딩 방식 : 비동기적 로딩, 모듈이 로드되기를 기다리지 않고도 다음 코드 실행 가능 

스코프 : 기본적으로 모듈 스코프 

각기 다른 인스턴스 : 같은 모듈을 다시 import 하면 새로운 인스턴스 생성 

 

 

  • CommonJS 모듈 사용 예시 
//find.js

function find(param0, param1) {
}
module.exports = { find };
//game.js

const { find } = require("./find");

console.log(find("198402", 1));
console.log(find("200008", 8));
console.log(find("199004", 5));

 

위 코드를 ES 모듈로 바꾸면 아래 오류 발생 

 

> node:310424) Warning: To load an ES module, set "type": "module" in the package.json or use the .mjs extension. (Use node --trace-warnings ... to show where the warning was created)

 

 

GPT의 답변 : 

CommonJS 모듈 시스템에서 지원되지 않는 ES 모듈을 사용하려고 할 때 발생합니다. Node.js의 기본 설정에서는 .js 확장자를 가진 파일에서는 import 대신 require를 사용해야 합니다. 따라서 import find from "./find"; 구문을 CommonJS 스타일로 변경해야 합니다.

 

또는 package.json파일에 추가 

{

  "type": "module"

}