LinkedIn에서 제목 그대로 storybook 팀이 lodash 대신 toss 팀의 오픈소스인 es-toolkit을 도입했다
라는 문동욱님의 글을 보게 되었다.
storybook에 es-toolkit을 도입하게 된 설명은 다음과 같았다.
lodash is hard to tree-shake, it's CJS, and we want to move to less heavy, ESM dependencies.
This replaces lodash for es-toolkit which is mostly a drop-in replacement ♥️
I've only changed the core for now.
눈에 들어온 키워드는 tree-shake
, CJS
, ESM
tree-shake는 빌드 과정에서 사용하지 않는 모듈을 포함시키지 않는 것이라고 알고 있는데, 왜 lodash는 tree-shake가 어려운 걸까?
CJS와 ESM의 어떤 부분이 다르기 때문에 tree-shake에 영향을 주는 걸까?
Lodash가 tree-shake가 어려운 이유는 CommonJS(CJS)와 ES Modules(ESM)의 차이와 관련되어 있음
Lodash는 주로 CJS로 작성되었음
CJS(CommonJS)는 런타임에서 모듈을 불러오는 "동적 구조"이기에 tree-shake가 어려움
ESM(ES Modules)는 "정적 구조"이기에, 어떤 모듈을 사용하는 지 명확히 분석할 수 있어 사용하지 않는 코드를 제거(tree-shake)할 수 있음