오늘은 JS에서 다른 스크립트 파일을 현재 스크립트 파일로 불러와 사용할 수 있도록 하는 import, export에 대해서 정리해보았다.
크게 JS에서는 common js방식과 es module 방식이 있다.
html 문서에서는 주로 es module 방식을 통해 html에 js 스크립트 파일을 불러오곤 하는데, 이에 대해서도 알아보자.
ESM 이전에는 각각의 script 파일을 전역 스코프처럼 사용했다. HTML 파일에서 보다 위에 있는 script 파일은 전역 스코프처럼 하위의 script 태그에서 접근, 변경이 가능했다.
이 때문에 jQuery script를 최상단에 두고, 순서를 올바르게 구성하는게 중요했다.
그럼 이제 모듈화를 적용할 수 있는 두 가지 방법에 대해서 알아보자.
ES Modules: ES Modules는 정적 분석(Static Analysis)을 통해 모듈 의존성을 파악하므로 빌드 도구가 코드 번들링 및 최적화를 더 잘 수행할 수 있다.
즉, 코드를 실행하기 전에 어떤 모듈이 필요하고 어떻게 가져와야 하는지 미리 알 수 있다
CommonJS: CommonJS는 런타임에 모듈을 동적으로 로드하므로 정적 분석이 어렵고 번들링 및 최적화가 어려울 수 있다.
여러 항목을 하나의 모듈에서 내보낼 수 있다.
가져올 때, 가져온 항목의 이름과 내보낸 항목의 이름이 일치해야 한다!!!!
const a = 1
function fn(){}
class Class{}
export { a, fn, Class }
모듈에서 하나의 항목만 기본(default)으로 내보낸다.
가져올 때 이름을 마음대로 지정할 수 있으며, 중괄호를 사용하지 않는다.
// 변수값은 default로 선언, 내보내기가 동시에 되지 않는다
export default const a = 1 은 틀린 방법!!
export default { a: 1 }; 이 올바른 방법!!
// function
export default function fn(){}
// Class
export default class Class{}
default export는 모듈 당 하나만 가능하다.
//a.js
const a = 1
export default a
// fn.js
function fn(){}
export default fn
// Class.js
class Class{}
export default Class
import {a} from 'a.js'
import {fn} from 'fn.js'
import {Class} from 'class.js'
import a from 'a.js'
import fn from 'fn.js'
import Class from 'class.js'
//default의 경우 변수명은 원하는대로 바꿔도 된다.
import DD from 'class.js'
HTML 문서에서 스크립트 모듈을 불러오는 것은 다음과 같이 할 수 있다.
<script type="module" src="main.js"></script>
변수 내보내기:
module.exports.myVariable = 'Hello';
객체 내보내기:
module.exports.myObject = {
key1: 'value1',
key2: 'value2'
};
함수 내보내기:
module.exports.myFunction = function() {
// 함수 내용
};
클래스 내보내기:
class MyClass {
// 클래스 내용
}
module.exports = MyClass;
const 변수명 = require('./파일');