爲了讓Node.js的文件能夠相互調用,Node.js提供了一個簡單的模塊系統。
模塊是Node.js 應用程序的基本組成部分,文件和模塊是一一對應的。換言之,一個 Node.js 文件就是一個模塊,這個文件多是JavaScript 代碼、JSON 或者編譯過的C/C++ 擴展。 http://www.iis7.com/a/lm/zhanqun/ IIS7站羣大全
。。。
建立模塊
在 Node.js 中,建立一個模塊很是簡單,以下咱們建立一個 'main.js' 文件,代碼以下:
var hello = require('./hello');
hello.world();
以上實例中,代碼 require('./hello') 引入了當前目錄下的hello.js文件(./ 爲當前目錄,node.js默認後綴爲js)。
Node.js 提供了exports 和 require 兩個對象,其中 exports 是模塊公開的接口,require 用於從外部獲取一個模塊的接口,即所獲取模塊的 exports 對象。
。。。
服務端的模塊放在哪裏
也許你已經注意到,咱們已經在代碼中使用了模塊了。像這樣:
var http = require("http");
...
http.createServer(...);
Node.js中自帶了一個叫作"http"的模塊,咱們在咱們的代碼中請求它並把返回值賦給一個本地變量。
這把咱們的本地變量變成了一個擁有全部 http 模塊所提供的公共方法的對象。
Node.js 的 require方法中的文件查找策略以下:
因爲Node.js中存在4類模塊(原生模塊和3種文件模塊),儘管require方法極其簡單,可是內部的加載倒是十分複雜的,其加載優先級也各自不一樣。
。。。
從文件模塊緩存中加載
儘管原生模塊與文件模塊的優先級不一樣,可是都不會優先於從文件模塊的緩存中加載已經存在的模塊。
從原生模塊加載
原生模塊的優先級僅次於文件模塊緩存的優先級。require方法在解析文件名以後,優先檢查模塊是否在原生模塊列表中。以http模塊爲例,儘管在目錄下存在一個http/http.js/http.node/http.json文件,require("http")都不會從這些文件中加載,而是從原生模塊中加載。
原生模塊也有一個緩存區,一樣也是優先從緩存區加載。若是緩存區沒有被加載過,則調用原生模塊的加載方式進行加載和執行。
。。。
從文件加載
當文件模塊緩存中不存在,並且不是原生模塊的時候,Node.js會解析require方法傳入的參數,並從文件系統中加載實際的文件,加載過程當中的包裝和編譯細節在前一節中已經介紹過,這裏咱們將詳細描述查找文件模塊的過程,其中,也有一些細節值得知曉。
require方法接受如下幾種參數的傳遞:
-http、fs、path等,原生模塊。
-./mod或../mod,相對路徑的文件模塊。
-/pathtomodule/mod,絕對路徑的文件模塊。
-mod,非原生模塊的文件模塊。node