做者:http://raychase.iteye.com/blog/1463617javascript
老實說,以前我對CommonJS也是一無所知,直到不久前Node.js火起來,我去研究它,才瞭解到Node.js實際上是CommonJS的一個部分實現,我才關注起CommonJS來。前端
之前咱們提及HTML,咱們提及JavaScript,你們的印象彷佛都停留在了「網頁」上面,從2005年開始,由於Ajax的緣故,有一種叫作「前端程序員」的新型物種誕生了。java
但是如今,前端程序員不甘心本身的一畝三分地了,他們要越權,看看HTML 5的API吧,它是要吃了Flash啊,連Adobe都倒向HTML 5了,它的API能夠作各類各樣的事情,要繪圖、操做文件、客戶端數據庫、攝像頭、重力感應……這些特性,怎麼看怎麼都是一個Native App,或者是一個服務端的應用才具有的啊。git
另外一方面,在2009年8月,CommonJS誕生了(不妨讀讀這篇文章)。正是站在JavaScript的層面,它要作這樣一件相似的事情(The CommonJS API will fill that gap by defining APIs that handle many common application needs, ultimately providing a standard library as rich as those of Python, Ruby and Java.),同時伴隨着JavaScript的解釋器越來越成熟,性能愈來愈強,JavaScript的威力再也不僅僅被限制在瀏覽器端。程序員
這就是CommonJS的着力點。從CommonJS的官網來看,它至始至終都避免使用「規範」這個詞,彷佛不想自認,但個人理解,CommonJS本質上就是一個規範,它並不提供默認實現,而是要求一些JavaScript庫、框架、環境……去實現它的這些API定義。github
那麼,都有哪些API層面的定義呢?web
OK,涉及到二進制、編碼、IO、文件、系統、斷言測試、套接字、事件隊列、Worker、控制檯等等實現,偏偏彌補的傳統JavaScript的空白。數據庫
就以Node.js爲例,它實現了CommonJS的以下子規範:瀏覽器
再如大名鼎鼎的SeaJS、CouchDB和RequireJS,都是CommonJS的部分實現。併發
若是你有興趣,在這裏能夠找到CommonJS全部的子規範。
將來CommonJS還須要加入的底層API定義包括(語言和運行時環境、日誌、關係數據庫接口、結果集、併發、字符串/字節序列/IO、目標平臺的C語言標準統一的API和子進程):
高層API包括(HTTP客戶端API、Email、Jabber、國際化、Promise管理器、命令行處理):
這些均可以在CommonJS本身的Wiki上找到。
按照CommonJS小組本身的話來講,在CommonJS 0.5版本的開發過程當中,已經討論了API須要包含的範圍,創建了一個收集提議和優先級信息的Wiki頁,討論了現有的提議並排序,達成了基本一致的意見,提議都已在Wiki上定稿;如今當務之急包括給應用設計合理的API並文檔化,給這些API完成更多的實現等等。