js 파일 하나하나가 다 모듈이라고 할 수 있다.
ES6 모듈 포맷
- 모듈 내보내기
export
를 변수나 함수 앞에 붙이면 외부 모듈에서 해당 변수나 함수에 접근할 수 있습니다.
export { func };
export default
해당 모듈엔 개체가 하나만 있다를 명시적으로 알려준다.
파일 내에서 한개만 export
하거나, 대표로 export
할 것이 있을 때 많이 사용된다.
import func from './func'; //중괄호 없이 가져올 수 있다.
-모듈 가져오기
import
를 사용하면 외부 모듈의 기능을 가져올 수 있습니다.
import { func } from './func';
CommonJS
Node.js 의 첫번째 내장 모듈 시스템
- 모듈 내보내기
exports
를 변수나 함수 앞에 붙이면 외부 모듈에서 해당 변수나 함수에 접근할 수 있습니다.
module.exports = obj
-모듈 가져오기
require
를 사용하면 외부 모듈의 기능을 가져올 수 있습니다
const obj = require('./func')
그 외 AMD, UMD 등이 있다.
엄격 모드로 실행됨
모듈은 항상 엄격 모드(use strict)
로 실행됩니다.
모듈 레벨 스코프
모듈 내부에서 정의한 변수나 함수는 다른 스크립트에서 접근할 수 없다
(모듈에서 선언한 변수나 함수를 export 해서 접근)
단 한 번만 평가됨
동일한 모듈이 여러 곳에서 사용되더라도 모듈은 최초 호출 시 단 한 번만 실행
// admin.js
export let admin = {
name: "John"
};
// a.js
import {admin} from './admin.js';
admin.name = "지민";
// b.js
import {admin} from './admin.js';
alert(admin.name); // 지민
import.meta
import.meta
객체는 현재 모듈에 대한 정보를 제공해줍니다.
this는 undefined
모듈 최상위 레벨의 this
는 undefined
입니다. (엄격모드)
위에 모듈 문장은 정적이다. import 문에 동적 매개변수를 사용할 수 없다.
import(module)
표현식 let {hi, bye} = await import('./say.js');
hi();
bye();
부족한 설명 참고 (https://ko.javascript.info/modules-dynamic-imports)