ES6 이전에는 JS 자체의 Module 시스템이 존재하지 않았다.
.mjs
확장자V8 엔진에서는 모듈 파일의 확장자를 .mjs
로 하기를 추천한다. 그 이유는 다음과 같다.
.mjs
파일 일반적인 스크립트 파일이 아니라, 모듈임을 쉽게 파악할 수 있다..mjs
파일은 Node.js와 같은 런타임에 의해 "module"로서 파싱되며, Babel과 같은 툴로 빌드된다..mjs
확장자 배포시 주의할 점만약 .mjs
파일을 배포하려고 할 때는 Content-Type : text/javascript
헤더가 필요하다.
// file : aaa.mjs
export function getPoint(id) {
return id + 100;
}
// file : bbb.mjs
import { getPoint } from "./aaa.mjs";
console.log(getPoint(123123));
export
키워드<script>
태그에 명시해주지 않아도 된다. import하는 모듈에서 가져다 쓰기 때문이다.import
키워드<script>
태그에 명시해줘야 한다.<script type=module src="./bbb.mjs"
type = module
을 작성하면 defer 가 기본으로 동작한다.<script>
에 type=module
을 작성하면, 모듈마다 각자의 스코프를 갖게 된다.만약 모듈의 변수가 window Scope를 갖게하려면 Window 오브젝트에 변수와 함수를 작성하면 된다.
widnow.obj = {}
// file : keep.mjs
export const point = {
value: "초깃값",
};
// file : first.mjs
import { point } from "./keep.mjs";
console.log(point); //=> "초깃값"
point.value = "값 변경";
// file : second.mjs
import { point } from "./keep.mjs";
console.log(point); //=> "값 변경"
type=module
로 참조하는 module 파일에서 this 값은 undefined다.