以下幾篇文件比較重要:
commonjs module spec
commonjs package spec
npm install
node package.json
node module reference
node實現了commonjs的模組規範和包結構規範
模組規範(module spec)主要是定義不同模組間require,exports,module等api
包結構規範(package spec)主要是定義目錄結構,以及package.json的格式。另外node在package.json中還擴充套件了一些自定義的字段,其中最重要的就是main,後面會提到,當require乙個目錄時,該欄位描述了哪個js檔案作為入口
實際上,即使不遵循包結構規範,比如沒有package.json,js檔案之間相互引用也是可以的,比如:
這裡只有乙個單獨的calculator.js,顯然談不上什麼包結構,但是這個模組也完全可以被其他模組引用
var cal = require("c:/calculator");
var sum = cal.add(1, 2);
console.log(sum);
但是,如果想要方便地管理模組,或者提供給別人使用,那麼就需要遵循包結構規範。同時node也提供了npm來管理node module
乙個典型的node module,通常是乙個單獨的目錄,放在node_modules下。目錄下有lib,bin等子目錄,以及package.json描述檔案,比如:
package.json是核心,其中描述了該模組的入口,模組依賴的模組等。用npm install命令,可以自動讀取分析package.json中描述的依賴,並安裝到本地倉庫(放在node_modules下)
安裝模組通常有3種情況
典型的比如grunt-cli,使用npm install -g ***命令。有些公用的模組,後續需要用命令列來執行的,一般用這種方式安裝
如下目錄
在test_npm中,是這樣引用test模組的:
var test = require("test");
這行**執行不能成功,需要先執行npm install test,把test安裝到本地倉庫
其實除非是為了將自己開發的模組發布到npm registry或是npm source上,一般沒必要安裝本地模組,因為可以通過相對路徑或者絕對路徑載入到
這個特別重要,要詳細看這篇文件:node module reference
大致上有3種情況:
require("http");
這種是載入核心模組,包括http,fs,net等
require("mongo");
require("mysql");
require("express");
這種類似載入核心模組,不以"../"、"./"、"/"開頭,但是請求的是第三方模組,會從node_modules裡載入,然後依次查詢上層目錄的node_modules,直到/node_modules,如果還是沒找到,則丟擲錯誤
require("./abc");
require("../def");
require("/ghi");
這種是根據路徑載入
正式開發的專案,顯然應該按照node的包結構規範來組織目錄。最明顯的好處是,可以在package.json裡宣告依賴,然後就可以很方便地用npm install來安裝所需的第三方模組
對於server端開發來說,自己寫的**,用路徑來require就挺好,最好不要用模組名來require。否則的話,模組一修改,就需要重新npm install,非常麻煩,又沒有明顯的好處。相反用路徑來require,模組的修改馬上就能體現出來,開發很方便
個人感覺,相對路徑比絕對路徑更好。只要應用的目錄規劃沒變,只是部署的路徑改變,相對路徑都不需要修改
Node 之 模組載入原理與載入方式
node.js中的模組可以分為原生模組和檔案模組,通過node.js中可以通過require方法匯入模組 exports方法匯出模組。對於原生模組 比如說 http 只需要使用require http 匯入這個模組並將其賦值給乙個變數即可使用這個模組匯出的屬性 方法等。這裡寫入你的 對於檔案模組,可...
node的模組管理
1 2 一 從node modules目錄中載入模組 3 向這樣的寫法 4 require aa.js 5 則node將aa.js檔案視為node modules目錄下的乙個檔案 6 如果aa.js檔案的絕對路徑是這樣的 e node item item1 gys node modules aa.j...
node學習筆記 模組載入
學習筆記過程,自己理解,方便自己查詢,新手一枚,希望批評指正。通過命令列引數傳遞給nodejs以啟動程式的模組被稱為主模組。主模組負責排程組成整個程式的其它模組完成工作。用過require.js,應該知道這個概念。1.新建乙個名為1.js的檔案 function hello exports.hell...