CommonJS 는 JavaScript API를 정의하는 단체(=Group)이다.
자바스크립트는 빠르고 강력한 언어가 되었지만, 현재의 표준 JavaScript 스팩은 브라우져 환경을 벗어날 수 있는 API를 제공해 주지 못하고 있다.
CommonJS 는 JavaScript가 갖지 못한 API,
즉, Java 나 Ruby, Python이 갖고 있는 Standard Library API와 같은 API를 추가로 정의해서,
JavaScript를 범용 언어와 같이 만들고자 하는 것이다.
CommonJS 에서 가장 먼저 완성한 스팩은 Modules/1.0 이다.
(대부분이 말하는 CommonJS 를 따른다. 혹은 CommonJS 이다 라는 표현은, 이 CommonJS 모듈 스팩을 준수하고 있다 라는 뜻이다.)
Kris Kowal 님이 만드신, "CommonJS: JavaScript Everywhere" 라는 슬라이드 자료
CommonJS: JavaScript Everywhere
View more presentations from kriskowal
매우 간단하게 요약하자면,...
- Slide 5, 슬라이드에 초반에 Python 코드가 등장,
- Slide 6, JavaScript 로 Python 코드와 같은 코드를 작성할 수 있지만, 그 모든 방법은 표준이 아니다.
- Slide 7, 특히, 모듈, 파일 시스템, 웹 서버 게이트 웨이(?), 바이너리 데이터 등등이 표준에 없다.
(ECMAScript의 브라우져 관련 API는 표준으로 있는데,...) - Slide 8, CommonJS에서 표준화를 하자!
- Slide 11, CommonJS는 API 이다.
- Slide 16 ~ 49, CommonJS 표준엔 Modules 1.1 부터.. Packages 까지 정의가 되어 있다.
- Slide 52 ~ 53, (CommonJS API를 이용해서) 처음 등장한 Python 코드와 같은 역활을 하는 JavaScript 코드로 작성!!
CommonJS에서 표준화 작업중인 내용들
현재(2011.11.18), 아래와 같은 내용(=CommonJS 위키 페이지에서 확인 가능)들이 토론되어지고 있는 중이다.
- Uniform Baseline / 글로벌 (discussion) - 여러 JS 엔진에서 동일하게 동작하도록 하기위한 토론.
- 모듈 (1.1.1)
binary
: 바이너리 데이터 타입 (byte arrays and/or strings) (proposals, discussion, early implementations)encodings
: 인코딩과 문자열 (proposals, discussion, early implementations) -io
: I/O 스트림 (proposals, discussion)fs
,fs-base
: 파일 시스템 (proposals, discussion, early implementations)system
: 시스템 인터페이스 (stdin, stdout, stderr, &c) (1.0, amendments proposed)assert
,test
: 단위 테스트 (1.0, amendment proposals pending)sockets
: 소켓 I/O TCP/IP 소켓 (early proposals)event-queue
: 리액터(=Reactor, 이벤트 발생자)/이벤트 큐 (early proposals)worker
: 워커(Worker) (공유하지 않는 동시(=concurrent) 프로세스/쓰레드) (proposal)console
: 콘솔(=console) (proposal)
- 패키지 (1.0)
- Package Mappings (proposal)
- Web Server Gateway Interface (JSGI) (proposals, discussion, early implementations)
- Promises (proposal) - 비동기 처리를 위한 스팩