Node | require , import, export/s 차이점

|

요약

자바스크립트에서의 대표적인 파일 입출력 방법은 CommonJSES6 문법이 있습니다.
서로 사용법이 다르며, 특징과 차이점이 있습니다.

CommonJS 문법

  • require : 가져오기
  • exports : 내보내기
  • module.exports : 내보내기

특징

  1. NodeJS 에서 사용하고 있는 CommonJS 모듈 키워드입니다.
  2. 루비 언어 방식과 비슷합니다.
  3. 파일 어느 지점에서든지 호출 가능

  • require() : module.exports 를 리턴합니다
  • exports 는 module.exports 를 refer 한 것이고, shortcut 에 불과합니다 *공식문서

ES6 문법

  • import : 가져오기
  • export : 내보내기
  • export defaults : 내보내기

특징

  1. ES6에서 새롭게 도입된 키워드입니다.
  2. 자바와 파이썬 언어 방식과 비슷합니다.
  3. 파일 시작 부분에서만 호출 가능
  4. 필요한 모듈 부분만 선택하고 로드할 수 있어 더 선호
    require() 에 비해 성능이 우수하며 메모리 절약

주의사항

출력할 때 export(ES6)exports(CommonJS)를 헷갈리지 않도록 주의해야 합니다.

require / exports

  • CommonJS 문법입니다.
/* CommonJS  */
const name = require('./module.js');

전체 내보내기

// 모듈 전체를 export, 파일내 한번만 사용가능하다.
const obj = {
   num: 100,
   sum: function (a, b) {
      console.log(a + b);
   },
   extract: function (a, b) {
      console.log(a - b);
   },
};
 
module.exports = obj;
const obj = require('./exportFile.js');
 
obj.num; // 100
obj.sum(10, 20); // 30
obj.extract(10, 20); // -10

개별 내보내기

// 멤버를 직접 일일히 export
exports.name = 'Ann'; // 변수의 export
exports.sayHello = function() { // 함수의 export
    console.log('Hello World!');
}
exports.Person = class Person { // 클래스의 export
    constructor(name){
        this.name = name;
    }
}
const { name, sayHello, Person } = require('./exportFile.js');
 
console.log(name); // Ann
sayHello(); // Hello World!
const person = new Person('inpa');

import / export

  • ES6 문법입니다.
/* ES6 */
import name from './module.js'

전체 내보내기

// 모듈 전체를 export, 파일내 한번만 사용가능하다.
const obj = {
   num: 100,
   sum: function (a, b) {
      console.log(a + b);
   },
   extract: function (a, b) {
      console.log(a - b);
   },
};
 
export default obj;
// 전체 자체를 export 할 경우 중괄호 없이 그냥 씀
import obj from './exportFile.js';
 
obj.num; // 100
obj.sum(10, 20); // 30
obj.extract(10, 20); // -10

개별 내보내기

// 멤버를 직접 일일히 export
export const name = 'Ann'; // 변수의 export
export function sayHello() { // 함수의 export
    console.log('Hello World!');
}
export class Person { // 클래스의 export
    constructor(name){
        this.name = name;
    }
}
 
 
// ----------------------- OR ----------------------- //
 
 
// 멤버를 따로 묶어서 export
const name = 'Ann';
function sayHello() {
    console.log('Hello World!');
}
class Person {
    constructor(name){
        this.name = name;
    }
}
export {name, sayHello, Person}; // 변수, 함수, 클래스를 하나의 객체로 구성하여 export
import { name, sayHello, Person } from './exportFile.js';
 
console.log(name); // Ann
sayHello(); // Hello World!
const person = new Person('inpa');
 
 
// ----------------------- OR ----------------------- //
 
 
// 개별로 export 된걸 * 로 한번에 묶고 as 로 별칭을 줘서, 마치 전체 export default 된걸 import 한 것 처럼 사용 가능
import * as obj from './exportFile.js'; 
 
console.log(obj.name); // Ann
obj.sayHello(); // Hello World!
const person = new obj.Person('inpa');

Node.js 에서 ES6 설정하기

import, export 문법을 사용하려면 설정이 필요합니다.

{
    "type": "module"
}

package.json 파일에 위의 값을 추가하는 방법입니다.
다른 방법은 import , export 를 인식시키기 위해 .mjs 파일을 생성하여
모듈 키워드를 구분하는 방법이 있습니다.

express 모듈 import로 전송

// const express = require('express');
import express from 'express';
 
const app = express();
 
app.get('/', (req, res) => {
   res.send('<h1>Hello World!</h1>');
});
 
app.listen(3000, () => {
   console.log('3000번 포트 서버 시작');
});

모듈 내보내기

  • node.js (CommonJS) :
    module.exports
  • ES6 :
    export default

하나의 프로그램에서 두 키워드동시에 사용할 수 없습니다

참조

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

클릭하여 복사