Node.js的包詳細介紹,Node.js包詳細介紹
在Node.js語言中,包和模組並沒有本質的不同,包是在模組的基礎上更深一步的抽象,包將某個獨立的功能封裝起來,用於發布、更新、依賴管理和進資料列版本設定。Node.js根據CommonJS規範實現了包機制,開發了npm來解決包的發布和擷取需求。
Node.js的包是一個目錄,其中包含JSON格式的包說明檔案package.json。Node.js的包基本遵循CommonJS規範,因此具備以下特徵:
CommonJS規範定義的包特性:
1)頂層目錄包含package.json檔案;
2)bin目錄存放二進位檔案;
3)lib目錄存放JavaScript檔案;
4)doc目錄存放文檔;
5)test目錄存放單元測試。
Node.js的模組與檔案是一一對應的,檔案不僅可以是JavaScript源碼檔案或二進位檔案,還可以是目錄。最簡單的包,就是一個目錄的模組。
Node.js的包通常是一些模組的集合,在模組的基礎上提供了更高層的抽象,相當於提供了一些固定介面的函數庫。
通過定製package.json,我們可以建立更複雜、更完善、更符合規範的包用於發布。
Node.js在調用包時,首先會檢查包中的package.json檔案的main欄位,將其作為包的介面模組,如果package.json檔案的main欄位不存在,那麼Node.js會嘗試尋找index.js或index.node作為包的介面。
package.json檔案是CommonJS規範用於描述包的檔案,完全符合規範的package.json檔案應該包含以下欄位:
1)name:包名。包名是唯一的,由小寫字母、數字和底線組成,不能含空格。
2)description:包說明。對包進行簡要描述。
3)version:版本號碼。滿足《語義化版本識別》規範的版本字串。
4)keywords:關鍵字數組,通常用於搜尋。
5)maintainers:維護者數組。每個元素包含name、email(可選)、web(可選)欄位。
6)contributors:貢獻者數組。格式與maintainer數組相同。包作者應該是貢獻者數組的第一個元素。
7)bugs:提交bug的地址,可以是網址或電郵地址。
8)licenses:許可證數組。每個元素要包含type(許可證名稱)和url(連結到許可證文本的地址)欄位。
9)repositories:倉庫託管地址數組。每個元素要包含type(倉庫的類型,如Git)、url(倉庫地址)和path(相對於倉庫的路徑,可選)欄位。
10)dependencies:包依賴。是一個關聯陣列,由包名和版本號碼組成。
註:《語義化版本識別》規範是國外提出的一套版本命名規範,最初目的是解決各種各樣的版本號碼大小比較的問題,目前被許多包管理系統所採用。
下面是一個完全符合CommonJS規範的package.json例子:
複製代碼 代碼如下:
{
"name": "testpackage",
"description": "My package for CommonJS.",
"version": "0.1.0",
"keywords": [
"testpackage",
"liq"
],
"maintainers": [
{
"name": "liq",
"email": "liq@hotmail.com",
}
],
"contributors": [
{
"name": "liq",
"web": "http://blog.csdn.net/chszs"
}
],
"bugs": {
"mail": "liq@hotmail.com",
"web": "http://blog.csdn.net/chszs"
},
"licenses": [
{
"type": "Apache License v2",
"url": "http://www.apache.org/licenses/apache2.html"
}
],
"repositories": [
{
"type": "git",
"url": "http://github.com/chszs/packagetest.git"
}
],
"dependencies": {
"webkit": "1.2",
"ssl": {
"gnutls": ["1.0", "2.0"],
"openssl": "0.9.8"
}
}
}