모듈 내보내기 및 가져오기

천둥상어

·

2024. 4. 17. 23:03

반응형

 

노드 모듈 시스템은 CommonJS 모듈 시스템과 ES 모듈시스템이 있다.

그리고 보통 하나의 모듈 시스템으로 개발한다.

 

여러 패키지 설명글을 보다 보면 모듈을 가져오는

예제 코딩을 볼 수 있다.

 

이때 CommonJS 방식으로 설명하는 곳이 있는가 하면

ES 방식으로 설명하는 곳도 있다.

 

이런 모듈 시스템 차이를 모르고 맞지 않는 방법으로

모듈을 내보내거나 가져올려고 하면 당연히 에러나 발생한다.

 

CommonJS 모듈 시스템 내보내기 및 가져오기

 

환경설정

환경 설정에서 모듈 시스템을 따로 설정하지 않았다면 디폴트는 CommonJS 시스템이다.

 

내보내기 (modusl.exports)

CommonJS 방식에서 모듈은 module.exports = 변수나 함수 방식으로 내보낸다.

// cj_testFnc.js
const testFnc = () => {
  console.log(`testFnc 호출`);
};

module.exports = testFnc;

 

내보내야 하는 대상이 여러개면  객체로 처리하면 된다.

// cj_testFnc.js

const testFnc0 = () => {
  console.log(`testFnc0 호출`);
};

const testFnc1 = () => {
    console.log(`testFnc1 호출`);
  };

module.exports = {testFnc0, testFnc1};

 

가져오기 (require)

모듈은 require(파일 경로) 로 가져올 수 있다.

// cj_app.js
const testFnc = require("./cj_testFnc");

testFnc();

 

가져오는 대상이 여러개라면 구조 분해 할당 해준다.

const { testFnc0, testFnc1 } = require("./cj_testFnc");

testFnc0();
testFnc1();

 

아니면 객체로 받아서 처리 할 수도 있다.

const testObj = require("./cj_testFnc");

testObj.testFnc0();
testObj.testFnc1();

 

ES 모듈 시스템 내보내기 및 가져오기

 

환경설정

package.json 파일이 없다며 루트에 생성 해서 다음과 같이 타입을 설정한다.

이 환경 설정이 되어 있지 않다면 ES 모듈 시스템을 사용할 수 없다.

{
  "type": "module"
}

 

내보내기 (export)

ES 방식은 export 명령어를 사용하여 내보내게 된다.

보통 변수나 함수앞에 export를 붙여준다.

// es_testFnc.js
// 변수나 함수 앞에 export

export const testFnc = () => {
  console.log(`testFnc 호출`);
};

 

단일 대상인 경우에는 export default 변수 or 함수로 내보낼 수도 있다.

// es_testFnc.js
// 내보내야 하는 대상이 하나인 경우

const testFnc = () => {
  console.log(`testFnc 호출`);
};

export default testFnc;

 

그리고 대상이 여러개 라면 export {대상, 대상,... }와 같이 객체로 내보낸다. 

// es_testFnc.js
// 내보내야 하는 대상이 여러개라면 객체로 내보낸다.

const testFnc0 = () => {
  console.log(`testFnc0 호출`);
};

const testFnc1 = () => {
  console.log(`testFnc1 호출`);
};

export {testFnc0, testFnc1}

 

제일 처음 설명한 방법으로도 여러개를 내보낼 수 있다.

// es_testFnc.js

export const testFnc0 = () => {
  console.log(`testFnc0 호출`);
};

export const testFnc1 = () => {
  console.log(`testFnc1 호출`);
};

 

가져오기 (import)

ES 모듈은 import 변수명 또는 함수명 from 모듈파일 으로 가져온다.

// es_app.js

import { testFnc } from "./es_testFnc.js";

testFnc();

 

가져올 때 import ~as로 이름을 바꿔 사용할 수도 있다.

// es_app.js

import { testFnc as rename } from "./es_testFnc.js";

rename();

 

 

모듈 파일 하나에 가져오는 대상이 여러개라면 다음과 같이 작성한다.

// es_app.js

import { testFnc0, testFnc1 } from "./es_testFnc.js";

testFnc0();
testFnc1();

 

아니면 import * as 네임스페이스를 지정하여 한번에 가져올 수도 있다.

// es_app.js

import * as MyModual from "./es_testFnc.js";

MyModual.testFnc0();
MyModual.testFnc1();
반응형