node的模組載入與管理

2021-09-30 10:51:17 字數 2280 閱讀 5325

以下幾篇文件比較重要:

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...