- 모듈 시스템이 없었다.
- 라이브러리를 사용 할 땐 스크립트 태그를 사용해야했다.
- 그러다보니 전역변수/객체를 정의하니 문제가있었다. - 변수명이 겹친다.
- require 문 도입
- 파일 단위의 개발
- 수백개, 수천개의 js 파일로 분리 가능
- 손쉬운 라이브러리 함수 재사용
- TSC/babel 은 import-로 작성하면 commonJS 로 변환한다.
- Common JS 는 언어 표준이 아니다.
- node, deno 환경이 없으면 돌아가지 않는다.
- 정적 분석의 어려움
- 조건적으로 호출하거나..삼항연산자를쓰거나..이런것들이 가능해서
- 조용한 require 함수 재정의 가능 (덮어쓰기)
- 비동기 모듈 정의 불가능
- 정적 분석 쉬움
- 쉬운 비동기 모듈
- esm은 언어표준 - node.js 뿐 아니라 브라우저,deno 등 다양한 런타임에서 사용가능
- ESM 도입으로 해결하쟈~
- 우리가 사용하는 가짜 ESM’
- 성숙하지 않은 생태계
// 가짜
import { Component } from './MyComponent';
// 진짜
import { Component } from './MyComponent.js';
- 생각못해본 부분이네ㅎㅎ..우리가 지금 쓰고 있는 import문은 tsloader나 바벨이 require문으로 돌려주는..그냥 가짜 import문이었구나