node模塊與包管理
在Node中,使用的是Commonjs模塊標(biāo)準(zhǔn),commonjs模塊系統(tǒng)是文件之間共享對(duì)象或函數(shù)的唯一方式肉微。注意耍目,node中沒有全局變量,全局命名空間的概念廓潜,你要用什么模塊,直接require()過來,然后將這個(gè)模塊對(duì)象復(fù)制給任意的一個(gè)局部變量啊奄。
關(guān)于node中的模塊,需要理解它的模塊的種類雹仿,加載的方式和系統(tǒng)加載模塊的優(yōu)先級(jí)情況增热。
模塊種類
核心模塊:核心模塊定義在lib目錄下,這些模塊是被編譯成二進(jìn)制的胧辽,如console模塊峻仇,URL,path模塊等邑商,另外摄咆,node總是先加載核心模塊。只能通過模塊名引用人断,而不能通過文件路徑引用
文件模塊:可通過絕對(duì)路徑或者相對(duì)路徑從文件系統(tǒng)中加載非核心模塊
node_modules文件夾模塊:node會(huì)在指定的文件夾下查找模塊吭从,并假定該文件夾是一個(gè)包,并查找包定義恶迈,包定義包含在package.json的文件中涩金,如果沒有package.json那么包的入口點(diǎn)會(huì)假定為index.js.
注意:如果require()方法中的模塊名不是一個(gè)本地模塊,也沒有以'/','../',或者是'./'這樣的相對(duì)路徑開頭暇仲,那么node會(huì)從當(dāng)前模塊的父目錄開始步做,嘗試在node_modules文件夾里加載相應(yīng)模塊,沒找到的話會(huì)移動(dòng)到上一級(jí)目錄奈附,直到頂層目錄全度,如位于/home/king/westorm/projects/cp2/foo.js的文件調(diào)用了require('circle.js'),依次查找的位置為:
/home/king/westorm/projects/ch2/node_modules/foo.js
/home/king/westorm//projects/node_modules/foo.js
/home/king/westorm/node_modules/foo.js
/home/node_modules/foo.js
/node_modules/foo.js
緩存模塊:模塊首次加載時(shí)會(huì)被緩存起來
系統(tǒng)加載模塊的優(yōu)先級(jí)
如下圖:
模塊的循環(huán)調(diào)用問題