[React #14] 모듈 시스템 / Common JS / ES Module

    반응형

    01. 모듈 시스템

    • 로그인이나 회원가입 등 복잡한 기능들을 하나의 파일에만 작성하면 복잡하고 생산성이 떨어지기 때문에 기능 별로 파일을 분리함
    • 모듈 : 기능 별로 나뉘어진 각각의 자바스크립트 파일들
    • 모듈 시스템 : 모듈을 생성하고, 불러오고, 사용하는 등의 모듈을 다루는 다양한 기능을 제공하는 시스템
    • 대표적 자바스크립트의 모듈 시스템 : Common JS, ES Module

     

    02. Common JS (CJS)

     

    01) math 모듈을 내보내기

     

    📑 math.js

    - 객체(module)를 만들고 안에 프로퍼티로 내보내고 싶은 값들을 넣어주기

    function add(a, b) {
      return a + b;
    }
    
    function sub(a, b) {
      return a - b;
    }
    
    module.exports = {
      add: add,
      sub: sub,
    };

     

    02) 내보낸 math 모듈을 index 모듈로 가져오기

     

    📑 index.js

    - 내장함수 require : 모듈의 경로를 인수로 전달하면 값을 반환해줌

    const moduleData = require('./math');
    console.log(moduleData); // { add: [Function: add], sub: [Function: sub] }
    console.log(moduleData.add(1, 2)); // 3
    console.log(moduleData.sub(2, 5)); // -3

     

    - 객체의 구조 분해 할당 이용

    const { add, sub } = require('./math');

     

     

    03. ES Module(ESM)

     

    01) 패키지 설정 파일 수정

     

    📑 package.json

    - 아래에 코드 추가하기

    {
      "type": "module"
    }
    • 앞으로 이 패키지에서 ES Module 시스템을 사용하겠다는 뜻

     

    02) math 모듈을 내보내기

     

    📑 math.js

    - export 뒤에 객체를 리터럴로 생성해서 내보내고 싶은 값을 담아주기

     

    방법 ① : 한번에 모아서 보내기

    function add(a, b) {
      return a + b;
    }
    
    function sub(a, b) {
      return a - b;
    }
    
    export { add, sub };

     

    방법 ② : 각각 보내기

    export function add(a, b) {
      return a + b;
    }
    
    export function sub(a, b) {
      return a - b;
    }
    • 함수 선언문 앞에 export 붙여주기

    방법 ③ : default로 보내기

    export default function multiply(a, b) {
      return a * b;
    }
    • default : 현재 모듈을 대표하는 기본값으로 설정

     

    03) 내보낸 math 모듈을 index 모듈로 가져오기

     

    📑 index.js

    - import 뒤에 중괄호로 가져오고 싶은 값을 담고, from에는 가져올 경로 명시

     

    방법 ① : 기본

    import { add, sub } from './math.js';
    console.log(add(1, 2)); // 3
    console.log(sub(2, 5)); // -3
    • 경로에는 꼭 확장자 포함해서 명시하기

    방법: 동일한 경로라면 한번에 받기

    import mul, { add, sub } from './math.js';

     

    방법 ③ : default로 보낸 값 받기

    import mul from './math.js';
    
    console.log(mul(3, 3)); // 9

     

    💡 ES Module일 때 CommonJS 사용했을 경우

    더보기
    ReferenceError: require is not defined in ES module scope, you can use import instead
    • ES Module과 CommonJS는 함께 사용할 수 없음
    • CommonJS 코드를 ES Module로 바꿔줘야 함

     

     

    참고자료

    이정환 Winterlood, '한입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지'
    반응형

    댓글