參考:[require() 源碼解讀](http://www.ruanyifeng.com/blog/2015/05/require.html)
2009年,Node.js 項目誕生,所有模塊一律為 CommonJS 格式。
時至今日,Node.js 的模塊倉庫 npmjs.com ,已經存放了15萬個模塊,其中絕大部分都是 CommonJS 格式。
這種格式的核心就是 require 語句,模塊通過它加載。學習 Node.js ,必學如何使用 require 語句。本文通過源碼分析,詳細介紹 require 語句的內部運行機制,幫你理解 Node.js 的模塊機制。
分析源碼之前,先介紹 require 語句的內部邏輯。如果你只想了解 require 的用法,只看這一段就夠了。
下面的內容翻譯自《Node使用手冊》。
當 Node 遇到 require(X) 時,按下面的順序處理。
(1)如果 X 是內置模塊(比如 require('http'))
a. 返回該模塊。
b. 不再繼續執行。
(2)如果 X 以 "./" 或者 "/" 或者 "../" 開頭
a. 根據 X 所在的父模塊,確定 X 的絕對路徑。
b. 將 X 當成文件,依次查找下面文件,只要其中有一個存在,就返回該文件,不再繼續執行。
X
X.js
X.json
X.node
c. 將 X 當成目錄,依次查找下面文件,只要其中有一個存在,就返回該文件,不再繼續執行。
X/package.json(main字段)
X/index.js
X/index.json
X/index.node
(3)如果 X 不帶路徑
a. 根據 X 所在的父模塊,確定 X 可能的安裝目錄。
b. 依次在每個目錄中,將 X 當成文件名或目錄名加載。
(4) 拋出 "not found"
參考:[NodeJs:“require” 函數詳解,懂這個你就懂NodeJs了](http://www.cnblogs.com/happyframework/articles/3064517.aspx)