둘다 외부의 파일이나 라이브러리의 코드를 불러온다는 목적을 가지고 있다.


require / exports

  • NodeJS에서 사용되고 있는 CommonJS 키워드이고 Ruby 언어 스타일과 비슷하다고 볼수 있다.
  • 모듈을 내보낼때는 ES6처럼 명시적으로 선언하는 것이 아니라 특정 변수나 그 변수의 속성으로 내보낼 객체를 세팅해 줘야 한다.
  • 특히, 유사해 보이는 export 변수와 module.exports 변수를 상황에 맞게 잘 사용해야 한다.
  • 기본적으로 2가지 규칙만 기억하면 된다.
    • 여러개의 객체를 내보낼 경우 → export.변수 의 개별 속성으로 할당
    • 딱 하나의 객체를 내보낼 경우 → module.exports = 객체 자체에 할당
  • 노드 프로젝트에서 import를 사용하기 위해서는 JSON 속성에 "type": "module"  을 추가해주면 된다.
const name = require('./module.js');

import / export

  • ES6(ES2015)에서 새롭게 도입된 키워드로서 Java나 Python 언어 방식과 비슷하다.
import name from './module.js';

ES6 와 CommonJS 의 export(내보내기) 차이점

  • CommonJS와 ES6라는 모듈 시스템에서는 exports 객체라는 개념이 존재한다.
  • exports는 모듈로부터 내보내지는 데이터들을 담고 있는 하나의 객체이다.
  • NodeJS프로젝트를 진행할때 module.exports =라는 모듈 내보내기 구문을 사용했을 것이다.
  • ES6의 export default 구문이 CommonJS의 module.exports 구문 동작을 대체하기 위한 문법이라고 보면 된다.

require와 import의 주요 차이점

  • require()는 CommonJS를 사용하는 node.js문이지만 import()는 ES6에서만 사용한다.
  • require()는 파일 (어휘가 아님)에 들어있는 곳에 남아 있으며 import()는 항상 맨 위로 이동한다.
  • require()는 프로그램의 어느 지점에서나 호출 할 수 있지만 import()는 파일의 시작 부분에서만 실행할 수 있다. (그렇지만 import 전용 비동기 문법으로 파일 중간에 모듈 불러오기를 할 수 있다.)
  • 하나의 프로그램에서 두 키워드를 동시에 사용할 수 없다.
  • 일반적으로 import()는 사용자가 필요한 모듈 부분 만 선택하고 로드 할 수 있기 때문에 더 선호된다. 또한 require()보다 성능이 우수하며 메모리를 절약한다.

참고링크

[NODE] 📚 require vs import 문법 비교 (CommonJS vs ES6)

[JS] 📚 모듈 사용하기 import / export 완벽 💯 정리