ESM
#
ESM#
export import- 최상위 모듈스코프에서만 동작
- { } 안에서는 동작하지 않는다.
- 코드가 최상위 모듈스코프의 어떤 위치에 있어도 상관 없다.
- 정적인 방식
import 문에 동적 매개변수를 사용할 수 없다.
모듈 경로엔 원시 문자열만 들어갈 수 있다.
함수 호출 결과값을 경로로 쓸 수 없다.
런타임이나 조건부로 모듈을 불러올 수 없다.
정적인 방식은 번들링 작업을 가능하게 한다.
#
export변수/함수/클래스 의 선언부 앞에 export 를 붙인다.
클래스나 함수선언을 export 할 땐 세미콜론을 붙이지 않는다.
- 세미콜론은 표현식에서 붙인다.
선언부와 떨어진 곳에 export 붙이기
#
import#
import *- 코드가 짧아진다.
가져올 땐 대상을 명시하는 것이 좋은이유
웹팩과 같은 모던 빌드 툴
- 로딩 속도를 높이기 위해 모듈들을 모으는 번들링 최적화 수행
- 빌드툴은 실제 사용되는 함수만 번들링 결과물에 포함한다.
이름을 간결하게 써 준다.
say.sayHi()
보다sayHi()
코드 구조를 파악하기 쉬워 리팩토링, 유지보수에 도움
#
asimport 'as'
- 모듈의 이름을 바꿔서 가져옴
export 'as'
#
named export 와 export default모듈의 종류
- 복수의 함수가 있는 라이브러리 형태
- 예제
say.js
named export
한 모듈
- 예제
- 개체 하나만 선언 되어있는 모듈
export default
named export | export default | |
---|---|---|
import | {} 필요 | {} 불필요 |
export | 개체의 이름 필요 | 개체의 이름 없어도됨 |
개수 | N 개 | 1개 |
export, import Name | 동일해야함 | 임의로 정할 수 있음 |
#
export defaultexport
옆에 'default' 추가
`옆
javascript
// 📁 user.js
export default class {
constructor(name) {
this.name = name;
}
}
export, import
이름을 임의로 정할 수 있음.
하지만 코드의 일관성을 위해 파일이름과 동일한 것이 좋음.
- 강제 일관성을 위해서는 default 가 아닌 named export 를 사용할 수 있음.
#
default 키워드기본 내보내기를 참조하는 용도
#
export default / named export 혼용 가능- 으로 가져오기
#
모듈 다시 내보내기export User from './user.js'
는 에러
export * from './user.js'
- default export 가 무시된다.
- named export 만 다시 보내진다.
named 와 default 를 동시에 내보내기
예시) npm 을 통해 외부에 공개할 패키지를 만드는 상황
폴더구조
auto/index.js
- 진입점 역할을 하는 주요 파일
- 주요 파일을 통해 외부에 패키지를 노출시킨다.
import {login, logout} from 'auth/index.js'
- 개발자가 패키지를 사용하는 방법
#
동적으로 모듈 가져오기 import(module) 표현식#
import(module) 의 반환값- 이행된 프로미스 객체
- 프로미스의 값: 해당 모듈의 import, export 를 모두 포함하는 객체
#
특징코드 어디에서나 동적으로 사용 가능
named export
default export
동적 import 는 일반 스크립트에서도 동작한다.
<script type="module"/>
가 없어도 된다.
import()
는 함수 호출문법이 아니다.
- 변수에 복사할 수 없다.
- call, apply 를 쓸 수 없다.