js 라이브러리 만들 때 생각해볼 점.

1. 현재 JS의 생태계는 웹브라우저와 nodejs 로 양분되어있음

 

2. 문제는 nodejs 가 CommonJs 라고 불리는 모듈 방식으로 js파일 불러오는데, JS 공식에서 ESM(ES Modules) 이라고 불리는 방식을 공식으로 사용한다고 스펙 발표하고 적용 해버림.

2.1. 이 둘은 문법에 차이가 있고 로드하는 방식에서도 차이가 있음.

 

3. 문제는 npm 에 올라가있는 많은 요소들이 commonjs 형식으로 만들어져있음. 즉, 가져와서 바로 웹에 쓰기가.. 음음..

 

4. nodejs 도 esm 방식 지원함! nodejs에서는 commonjs 로 된것도 esm 사용환경에서 읽어와짐. 웹에선 안되니깐 문제...

4.1. nodejs 에서 esm 파일의 기본 확장자 mjs 가 esm.. 인데 package.json 에 type:'module' 처럼 적어서 기본 동작을 esm 으로 바꿀 수 있음.

4.2. 확장자 mjs는 필수가 아님. nodejs 에서 알아서 처리해준다는 것 뿐이지 그냥 js 확장자도 사용가능함.

 

5. 요즘 나오는 npm 의 라이브러리는 ems, cjs(commonjs) 를 같이 지원하는 경우가 많아짐(심지어 브라우저용 js도 포함하는 경우가 있음)

 

6. node에서는 package.json 의 설정으로 읽어오는 js를 제어할 수 있음.(expots 항목)

6.1. 브라우저에서는 package.json 을 안 읽기 때문에 의미가 없지만, 꼭 의미 없는 것도 아닌것이 webpack 같은 프로그램이 package.json 의 값을 참고해서 동작할 수 있음.

6.2. https://dev.to/snyk/building-an-npm-package-compatible-with-esm-and-cjs-in-2024-88m 참고

 

뭐뭐뭐 그렇다구.

댓글
  • No Nickname
    No Comment
  • 권한이 없습니다.
    {{m_row.m_nick}}
    -
목록형 📷 갤러리형
제목
[기본형] HTML (with 부트스트랩5.3 , jquery 3.7, vue.js)
유용한 리눅스(LINUX) 명령어
[공지] 기술 게시판
3.30
3.31
4.1
4.2
4.3
4.4
4.5
4.6
4.7
4.8
4.9
4.10
4.11
4.12
4.13
4.14
4.15
4.16
4.17
4.18
4.19
4.20
4.21
4.22
4.23
4.24
4.25
4.26
4.27
4.28
4.29
4.30
5.1
5.2
5.3