在之前的學習中我們使用require()
來引入我們需要的包,這其實就是模組化,各模組相互獨立,可以通過某種方式引入別的模組。而這些引入方式都是遵循一定的規範的,這就是CommonJS規範。
一、Commonjs規範
目前JS標準定義的API是為了構建基於瀏覽器的應用程式,沒有制定一個用於更廣泛的應用程式的標準庫。CommonJS規範致力於提供一個類似java、python等語言的標準庫,使JS可以開發伺服器端應用程式、命令列工具、桌面圖形介面應用程式
二、Nodejs中的模組化
Node應用程式由各種模組組成,採用CommomJS模組規範。
1、模組分類
Nodejs中模組分為兩類,一類是由Node提供的核心模組;另一類是由使用者編寫的檔案模組。
核心模組
核心模組在Node原始碼的編譯過程中被編譯進了二進位制檔案。在Node程式啟動時,核心模組會被直接載入進記憶體,所以在引入這些核心模組時,檔案定位和編譯執行這兩步可以省略。並且在路徑分析中優先判斷,所以它的載入速度是最快的。HTTP模組、URL模組、fs模組都是Node內建的核心模組,可以直接引用。
檔案模組
檔案模組則是在執行時動態載入,需要完整的路徑分析、檔案定位、編譯執行過程,速度相比核心模組稍微慢一些,但是用處非常多。這些模組需要我們自己定義,下面我們來看一下自定義模組。
2、自定義模組
我們把公共的功能抽成一個單獨的js檔案作為一個模組,預設情況下外部是無法訪問這個模組裡的方法或者屬性。如果想讓外部訪問模組內的屬性和方法,必須在模組裡通過exports
或者module.exports
暴露需要被外部訪問的屬性和方法。
在需要使用這些模組的檔案中通過require
引入該模組。這樣就可以使用這個模組裡暴露的屬性和方法。
定義模組,暴露屬性或方法
//tools.js
var tools = {
name:`Node`
sayHello:function () {
return `Hello NodeJs`;
}
}
//暴露屬性或方法
//module.exports = tools;
exports.add = tools.name;
exports.sayHello = tools.sayHello;
在別的檔案裡引入模組
//引入自定義模組
var tools = require(`./tools`);
//使用該模組裡暴露的方法
tools.name; // Node
tools.sayHello(); // Hello NodeJs
3、第三方模組
Nodejs中也可以使用第三方模組,Nodejs中第三方模組由包組成,包又包含若干模組,通過包來對一組具有相互依賴關係的模組進行統一管理。
完全符合CommonJs規範的包目錄一般包含如下這些檔案:
- package.json:包描述檔案
- bin:用於存放可執行二進位制檔案的目錄
- lib:用於存放Javascript程式碼的目錄
- doc:用於存放文件的目錄
我們使用npm
安裝第三方模組
npm install silly-datetime -Save
安裝完npm
後我們就可以使用這個包了:
var sd = require(`silly-datetime`);
sd.format(new Date(),`YYYY-MM-DD-HH:mm`);
三、npm
1、什麼是npm
npm全稱Node Package Manager,是Node.js的包管理器。可以使用它在Node.js應用程式中建立、共享和重用模組。
模組就是可重用的程式碼庫。比如用來與資料庫互動的模組、支援web開發的模組以及通過web套接字協助通訊的模組。
2、使用npm安裝模組
安裝模組有兩種方式:本地安裝、全域性安裝
本地安裝
本地安裝模組意味著模組會被安裝在專案內名為node_modules的資料夾中,而且它只可以在該專案中使用。這是推薦的安裝方式。
使用下列命令開始安裝模組:
npm install [module_name]
這個命令意思是向伺服器傳送一個請求,將該模組的最新版本下載到計算機上。當模組下載成功後會有下列語句輸出:
module_name@1.2.0 ./node_modules/module_name
這行輸出告訴我們模組的名稱、版本以及下載的位置。
全域性安裝
全域性安裝意味著該模組可在系統的任意地方使用。其他與本地安裝一致。與本地安裝稍有不同的是全域性安裝需要加上-g:
npm install [module_name] -g
3、使用模組
要在Node.js應用程式中使用模組,必須將其引入應用程式中,引入方法如下:
var module = require(`module`);
我們把它賦值給一個變數,以便於在以後使用這個模組。
4、查詢模組文件
有時候我們需要檢視模組文件,可以使用一下命令:
npm docs [module_name]
這個命令必須在Node.js專案資料夾的根目錄下執行,並且該模組已經下載到了node_modules資料夾下。
5、使用package.json指定依賴關係(dependency)
npm允許開發人員使用package.json檔案來指定在應用程式中要使用的模組,並且通過單個命令來安裝它們:
npm install
這樣做的好處有下列三點:
- 無需一個個安裝模組
- 其他開發人員可以容易的安裝你的應用程式
- 應用程式的依賴儲存在單一的地方
一個最小的package.json檔案是這樣的:
{
"name":"example1",
"version":"0.0.1",
"dependencies":{
"underscore":"~1.2.1"
}
}