CommonJS

做者: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的威力再也不僅僅被限制在瀏覽器端。程序員

 

  • 服務端JavaScript應用
  • 命令行工具
  • 圖形界面應用
  • 混合應用(Titanium、Adobe AIR等)

這就是CommonJS的着力點。從CommonJS的官網來看,它至始至終都避免使用「規範」這個詞,彷佛不想自認,但個人理解,CommonJS本質上就是一個規範,它並不提供默認實現,而是要求一些JavaScript庫、框架、環境……去實現它的這些API定義。github

 

那麼,都有哪些API層面的定義呢?web

  • binary: Binary Data Objects (byte arrays and/or strings) (proposals, discussion, early implementations)
  • encodings: Encodings and character sets (proposals, discussion, early implementations)
  • io: I/O Streams (proposals, discussion)
  • fs, fs-base: Filesystem (proposals, discussion, early implementations)
  • system: System Interface (stdin, stdout, stderr, &c) (1.0, amendments proposed)
  • assert, test: Unit Testing (1.0, amendment proposals pending)
  • sockets: Socket I/O TCP/IP sockets (early proposals)
  • event-queue: Reactor Reactor/Event Queue (early proposals)
  • worker: Worker Worker (concurrent shared nothing process/thread) (proposal)
  • console: console (proposal)

 

OK,涉及到二進制、編碼、IO、文件、系統、斷言測試、套接字、事件隊列、Worker、控制檯等等實現,偏偏彌補的傳統JavaScript的空白。數據庫

 

就以Node.js爲例,它實現了CommonJS的以下子規範:瀏覽器

  • Modules/1.0 (yes)
  • Promises/B (http://github.com/kriskowal/q)
  • Promises/D (https://github.com/kriskowal/q)
  • Unit Testing/1.0 (yes)

再如大名鼎鼎的SeaJS、CouchDB和RequireJS,都是CommonJS的部分實現併發

若是你有興趣,在這裏能夠找到CommonJS全部的子規範。

 

將來CommonJS還須要加入的底層API定義包括(語言和運行時環境、日誌、關係數據庫接口、結果集、併發、字符串/字節序列/IO、目標平臺的C語言標準統一的API和子進程):

  • Language and Runtime Services
  • Logging
  • Relational database interface
  • ResultSets (collections of data maybe from RDBMS, maybe from other sources)
  • Concurrency
  • String / ByteString I/O
  • C unified API to our Target Platforms
  • Subprocesses (popen)

高層API包括(HTTP客戶端API、Email、Jabber、國際化、Promise管理器、命令行處理):

  • HTTP client APIs
  • Email
  • Jabber (XMPP)
  • Internationalization
  • Promise Manager
  • Command line processing

這些均可以在CommonJS本身的Wiki上找到。

 

按照CommonJS小組本身的話來講,在CommonJS 0.5版本的開發過程當中,已經討論了API須要包含的範圍,創建了一個收集提議和優先級信息的Wiki頁,討論了現有的提議並排序,達成了基本一致的意見,提議都已在Wiki上定稿;如今當務之急包括給應用設計合理的API並文檔化,給這些API完成更多的實現等等。

相關文章
相關標籤/搜索