cjs가 먼지 몰라서 검색해보니깐 commonjs 얘기나오는데 같은 건가?? 노드js생태계 잘 모흐는데 설명좀해줄사람 ㅠ
댓글 8
1. 원래 자바스크립트는 웹사이트에서 간단한 동적 제어만 할 목적으로 만든 언어였어서 모듈을 불러오는 것도 html의 script 태그를 붙이면 걔가 읽어온 다음에 거기 전역변수를 몽땅 들고오는 식으로 모듈을 구현했었음
왼손(stonebed)2022-03-23 14:14
답글
2. 근데 자바스크립트 생태계가 점점 커지면서 이대로 했다가는 모듈 둘이서 서로 충돌나면서 와장창 날 일이 많아지고, 덕분에 모듈화를 할 방법론에 대해서 고민을 하게 됐음. 근데 표준이 정해진 게 없으니까 AMD, CommonJS 등등 각자 자신만의 규격으로 만들기 시작함
왼손(stonebed)2022-03-23 14:16
답글
3. 이러다보니까 표준을 담당하는 ECMA에서 표준 모듈안을 만들었는데(흔히 ESModule, 혹은 ESM이라 함) 자바스크립트 런타임 환경의 대다수를 차지하는 Node.js는 이미 CommonJS를 사용하던 상태였음
왼손(stonebed)2022-03-23 14:18
답글
4. CommonJS와 ESM은 둘이 내부구현이 달라서 단순치환으로 100% 호환이 안 됨. Node.js도 ESM을 따라갈거라 말했지만 그렇게 하면 기존에 자신의 생태계로 만들어진 모듈들이 제대로 작동할지조차 보증이 안 되는 상황.
왼손(stonebed)2022-03-23 14:20
답글
그래서 임시방편으로 확장자를 통해서 얘가 어떤 모듈을 썼는지를 구분을 하게 된거임. CommonJS는 그냥 js 써도 될텐데 ESM은 mjs던가를 명시적으로 써야했을걸.
cjs로 바꾸는 게 필수는 아닌데 CommonJS모듈을 사용할 거라고 명시적으로 보여주고 싶었나봐
왼손(stonebed)2022-03-23 14:22
답글
와 무친 선생님 완전 감사합니다
익명(riptarion95)2022-03-23 15:11
답글
제가 아까 좀 바빠서 후다닥 쓰느라 좀 틀린 게 있는데 보다 정확히는 mjs를 써야지만 되는 건 아니고 package.json에서도 설정해서 js가 ESM 읽어오게 할 수 있을거임. 암튼 대충 왜 mjs랑 cjs가 분리돼있는지는 설명이 되니깐 어쩔티비
1. 원래 자바스크립트는 웹사이트에서 간단한 동적 제어만 할 목적으로 만든 언어였어서 모듈을 불러오는 것도 html의 script 태그를 붙이면 걔가 읽어온 다음에 거기 전역변수를 몽땅 들고오는 식으로 모듈을 구현했었음
2. 근데 자바스크립트 생태계가 점점 커지면서 이대로 했다가는 모듈 둘이서 서로 충돌나면서 와장창 날 일이 많아지고, 덕분에 모듈화를 할 방법론에 대해서 고민을 하게 됐음. 근데 표준이 정해진 게 없으니까 AMD, CommonJS 등등 각자 자신만의 규격으로 만들기 시작함
3. 이러다보니까 표준을 담당하는 ECMA에서 표준 모듈안을 만들었는데(흔히 ESModule, 혹은 ESM이라 함) 자바스크립트 런타임 환경의 대다수를 차지하는 Node.js는 이미 CommonJS를 사용하던 상태였음
4. CommonJS와 ESM은 둘이 내부구현이 달라서 단순치환으로 100% 호환이 안 됨. Node.js도 ESM을 따라갈거라 말했지만 그렇게 하면 기존에 자신의 생태계로 만들어진 모듈들이 제대로 작동할지조차 보증이 안 되는 상황.
그래서 임시방편으로 확장자를 통해서 얘가 어떤 모듈을 썼는지를 구분을 하게 된거임. CommonJS는 그냥 js 써도 될텐데 ESM은 mjs던가를 명시적으로 써야했을걸. cjs로 바꾸는 게 필수는 아닌데 CommonJS모듈을 사용할 거라고 명시적으로 보여주고 싶었나봐
와 무친 선생님 완전 감사합니다
제가 아까 좀 바빠서 후다닥 쓰느라 좀 틀린 게 있는데 보다 정확히는 mjs를 써야지만 되는 건 아니고 package.json에서도 설정해서 js가 ESM 읽어오게 할 수 있을거임. 암튼 대충 왜 mjs랑 cjs가 분리돼있는지는 설명이 되니깐 어쩔티비