모듈
자바스크립트 코드를 여러 파일과 폴더에 나누어 작성하고 효율적으로 불러올 수 있도록 해주며, script 태그에 type="module" 어트리뷰트를 추가해주면, 이 파일은 모듈로서 동작합니다. 파일 확장자로는 대개 mjs가 사용
Webpack, Parcel 등의 모듈 번들러를 통해 변환과정을 거친 뒤, 브라우저에는 일반적인 JavaScript 파일로서 불러오는 방법이 널리 사용되고 있는 추세
- import 혹은 export 구문을 사용할 수 있음
- 엄격 모드(strict mode)로 동작
- 모듈이 가장 바깥쪽에서 선언된 이름은 모듈 스코프에서 선언됨
- 같은 모듈을 여러 다른 모듈에 불러와도, 모듈 내부의 코드는 한번만 실행
<script type="module" src="index.mjs"></script>
모듈 스코프
모듈이 가장 바깥쪽에서 선언된 이름은 모듈 스코프에서 선언됨.
모듈 스코프에 선언된 이름은 (export 해주지 않는다면) 해당 모듈 내부에서만 접근할 수 있음
// variables.js
const foo = 'bar';
// 이 파일이 모듈로서 사용되고 있다면, `undefined`가 출력됩니다.
console.log(window.foo);
export & import
모듈 스코프에서 정의된 이름은 export 구문을 통해 다른 파일에서 사용할 수 있음.
'이름이 지정된 export'라는 뜻에서 named export라 부름
// variables.js
// foo, spam을 다른 파일에서 사용할 수 있도록 export 해줌
const foo = 'bar';
const spam = 'eggs';
export { foo, spam };
// main.js
// variables 모듈에 선언된 이름을 사용하기 위해 import 해줌
import { foo, spam } from './variables.js';
console.log(foo);
console.log(spam);
// functions.js
// 여러 모듈에서 재사용 할 수 있음
function add(x, y) {
return x + y;
}
class Person {
// ...
}
export { add, Person };
다른 모듈에 있는 이름을 사용하려면, 해당 모듈에서 이름을 export 해야함
// variables.js
const foo = 'bar'
// main.js
import { foo } from './variables.js';
console.log(foo); // 에러가 나거나, `undefined`가 출력됨
default export
모듈을 대표하는 하나의 값을 지정하고 그 값을 다른 모듈에서 편하게 불러와서 사용
// foo.js
export default 'bar';
// main.js
import foo from './foo.js'
console.log(foo); // bar
default export & export 동시에 가져오기
// `React`라는 이름의 default export와,
// Component, Fragment라는 일반적인 export를 동시에 가져오기
import React, { Component, Fragment } from 'react';
다른 이름으로 export & import 하기
export 혹은 import 하는 이름의 뒤에 as를 붙여서, 다른 이름이 대신 사용
const foo = 'bar';
export {foo as FOO}; // FOO 라는 이름으로 export 됨
import { Component asa Comp } from 'react'; // Comp라는 이름으로 import
'JAVASCRIPT' 카테고리의 다른 글
예외 처리 (0) | 2020.07.30 |
---|---|
비동기 프로그래밍 (0) | 2020.07.30 |
큐, 스택, 트리 자료구조 (0) | 2020.07.30 |
class (0) | 2020.07.30 |
내장 객체 및 생성자 (0) | 2020.07.30 |