在JavaScript的發展歷程中,它主要在瀏覽器前端發光發熱。由于官方規范(ECMAScript)規范化的時間較早,規范涵蓋的范疇非常小。這些規范中包含詞法、類型、上下文、表達式、聲明(statement)、方法、對象等語言的基本要素。在實際應用中,JavaScript的表現能力取決于宿主環境中的API支持程度。在Web1.0時代,只有對DOM、BOM等基本的支持。隨著Web2.0的推進,HTML5嶄露頭角,它將Web網頁帶入Web應用的時代,在瀏覽器中出現了更多、更強大的API供JavaScript調用,這得感謝W3C組織對HTML5規范的推進以及各大瀏覽器廠商對規范的支持。但是,Web在發展,瀏覽器中出現了更多標準的API,這些過程發生在前端,后端JavaScript的規范卻遠遠落后。對于JavaScript自身而言,它的規范依然是薄弱的,還有以下缺陷:
* **沒有模塊系統**。
* **標準庫較少**。ECMAScript僅定義了部分核心庫,對于文件系統,I/O流等常見需求卻沒有標準的API。就HTML5的發展狀況而言,W3C標準化在一定意義上是在推進這個過程,但它僅限于瀏覽器端。
* **沒有標準接口**。在JavaScript中,幾乎沒有定義過如Web服務器或者數據庫之類的標準統一接口。
* **缺乏包管理系統**。這導致JavaScript應用中基本沒有自動加載和安裝依賴的能力。
CommonJS規范的提出,主要是為了彌補當前JavaScript沒有標準的缺陷,以達到像Python、Ruby和Java具備開發大型應用的基礎能力,而不是停留在小腳本程序的階段。他們期望那些用CommonJS API寫出的應用可以具備跨宿主環境執行的能力,這樣不僅可以利用JavaScript開發富客戶端應用,還可以編寫以下應用:
* 服務器端JavaScript應用程序。
* 命令行工具。
* 桌面圖形界面應用程序。
* 混合應用(Titanium和Adobe AIR等形式的應用)。
如今,CommonJS中大部分規范雖然依舊是草案,但是已經初顯成效,為JavaScript開發大型應用程序指明了一條非常棒的道路。目前,它依舊在成長中,這些規范涵蓋了模塊、二進制、Buffer、字符集編碼、I/O流、進程環境、文件系統、套接字、單元測試、Web服務器網關接口、包管理等。
理論和實踐總是相互影響和促進的,Node能以一種比較成熟的姿態出現,離不開CommonJS規范的影響。在服務器端,CommonJS能以一種尋常的姿態寫進各個公司的項目代碼中,離不開Node優異的表現。實現的優良表現離不開規范最初優秀的設計,規范因實現的推廣而得以普及。下圖是Node與瀏覽器以及W3C組織、CommonJS組織、ECMAScript之間的關系,共同構成了一個繁榮的生態系統:

Node借鑒CommonJS的Modules規范實現了一套非常易用的模塊系統,NPM對Packages規范的完好支持使得Node應用在開發過程中事半功倍。在本章中,我們主要就Node的模塊和包的實現進行展開說明。
- 目錄
- 第1章 Node 簡介
- 1.1 Node 的誕生歷程
- 1.2 Node 的命名與起源
- 1.2.1 為什么是 JavaScript
- 1.2.2 為什么叫 Node
- 1.3 Node給JavaScript帶來的意義
- 1.4 Node 的特點
- 1.4.1 異步 I/O
- 1.4.2 事件與回調函數
- 1.4.3 單線程
- 1.4.4 跨平臺
- 1.5 Node 的應用場景
- 1.5.1 I/O 密集型
- 1.5.2 是否不擅長CPU密集型業務
- 1.5.3 與遺留系統和平共處
- 1.5.4 分布式應用
- 1.6 Node 的使用者
- 1.7 參考資源
- 第2章 模塊機制
- 2.1 CommonJS 規范
- 2.1.1 CommonJS 的出發點
- 2.1.2 CommonJS 的模塊規范
- 2.2 Node 的模塊實現
- 2.2.1 優先從緩存加載
- 2.2.2 路徑分析和文件定位
- 2.2.3 模塊編譯
- 2.3 核心模塊
- 2.3.1 JavaScript核心模塊的編譯過程
- 2.3.2 C/C++核心模塊的編譯過程
- 2.3.3 核心模塊的引入流程
- 2.3.4 編寫核心模塊
- 2.4 C/C++擴展模塊
- 2.4.1 前提條件
- 2.4.2 C/C++擴展模塊的編寫
- 2.4.3 C/C++擴展模塊的編譯
- 2.4.2 C/C++擴展模塊的加載
- 2.5 模塊調用棧
- 2.6 包與NPM
- 2.6.1 包結構
- 2.6.2 包描述文件與NPM
- 2.6.3 NPM常用功能
- 2.6.4 局域NPM
- 2.6.5 NPM潛在問題
- 2.7 前后端共用模塊
- 2.7.1 模塊的側重點
- 2.7.2 AMD規范
- 2.7.3 CMD規范
- 2.7.4 兼容多種模塊規范
- 2.8 總結
- 2.9 參考資源
- 第3章 異步I/O
- 3.1 為什么要異步I/O
- 3.1.1 用戶體驗
- 3.1.2 資源分配
- 3.2 異步I/O實現現狀
- 3.2.1 異步I/O與非阻塞I/O
- 3.2.2 理想的非阻塞異步I/O
- 3.2.3 現實的異步I/O
- 3.3 Node的異步I/O
- 3.3.1 事件循環
- 3.3.2 觀察者
- 3.3.3 請求對象
- 3.3.4 執行回調
- 3.3.5 小結
- 3.4 非I/O的異步API
- 3.4.1 定時器
- 3.5 事件驅動與高性能服務器