Node.js學習(7)----包

包是在模塊的基礎上更深一步的抽象,Node.js的包相似於C/C++函數庫或者Java/.NET的類庫。它將獨立的功能封裝起來用於發佈、更新、依賴管理和版本控制。javascript

Node.js的包是一個目錄,其中包含一個JSON格式的包說明文件package.json.這裏必須在頂層目錄下。爲了提供兼容性,咱們建議嚴格按照commonJS規範。html

嚴格符合CommonJS規範的包應該具有如下特徵:java

#一、package.json必須在包的頂層目錄下。node

#二、二進制文件必須在bin目錄下。git

#三、Javascript代碼應該在lib目錄下。github

#四、文檔應該在doc目錄下。web

#五、單元測試應該在test目錄下。json


一、做爲文件夾的模塊

模塊與文件一一對應。文件不只能夠是Javascript代碼或二進制代碼,還能夠是一個文件夾。最簡單的包就是一個做爲文件夾的模塊。數組

#一、創建一個somepackage文件夾函數

#二、在somepackage下創建index.js文件

#三、文件中寫入

 

exports.hello=function(){
	console.log('Hello World');
};

#四、在somepackage文件夾外創建一個getpackage.js文件

 

#五、寫入

 

var somepackage=require('./somepackage');
somepackage.hello();

#六、輸出:Hello Wolrd

 

咱們使用這種方法能夠把文件夾封裝爲一個模塊,即所謂的包。包一般是一些模塊的集合,在模塊的基礎上提供更高層的抽象,至關於提供了一些固定接口的函數庫。經過定製package.json,咱們能夠建立更復雜、更完善、更符合標準的包用於發佈。


二、package.json

在somepackage中建立package.json,寫入:

 

{
	"main":"./lib/interface.js"
}

在somepackage中創建lib子文件夾,並在其中建立interface.js文件,在文件中寫入:

 

 

exports.hello=function(){
	console.log('Hello Node.js');
};

運行上面的getpackage.js,則運行結果爲:Hello Node.js

Node.js在調用某個包時,會首先檢查包中package.json中的main字段,將其做爲包的接口模塊,若是main不存在,會嘗試尋找index.js或者index.node做爲包的接口。

package.json 是 CommonJS 規定的用來描述包的文件,徹底符合規範的 package.json 文
件應該含有如下字段。
 name:包的名稱,必須是惟一的,由小寫英文字母、數字和下劃線組成,不能包含空格。
 description:包的簡要說明。
 version:符合語義化版本識別①規範的版本字符串。
 keywords:關鍵字數組,一般用於搜索。
 maintainers:維護者數組,每一個元素要包含 name、email (可選)、web (可選)字段。
 contributors:貢獻者數組,格式與maintainers相同。包的做者應該是貢獻者數組的第一個元素。
 bugs:提交bug的地址,能夠是網址或者電子郵件地址。
 licenses:許可證數組,每一個元素要包含 type (許可證的名稱)和 url (連接到許可證文本的地址)字段。
 repositories:倉庫託管地址數組,每一個元素要包含 type (倉庫的類型,如 git )、url (倉庫的地址)和 path (相對於倉庫的路徑,可選)字段。

 dependencies:包的依賴,一個關聯數組,由包名稱和版本號組成。

下面是一個徹底符合 CommonJS 規範的 package.json 示例:

 

{
"name": "mypackage",
"description": "Sample package for CommonJS. This package demonstrates the required
elements of a CommonJS package.",
"version": "0.7.0",
"keywords": [
"package",
"example"
],
"maintainers": [
{
"name": "Bill Smith",
"email": "bills@example.com",
}
],
"contributors": [
{
"name": "BYVoid",
"web": "http://www.byvoid.com/"
}
],
"bugs": {
"mail": "dev@example.com",
"web": "http://www.example.com/bugs"
},
"licenses": [
{
"type": "GPLv2",
"url": "http://www.example.org/licenses/gpl.html"
}
],
"repositories": [
{
"type": "git",
"url": "http://github.com/BYVoid/mypackage.git"
}
],
"dependencies": {
"webkit": "1.2",
"ssl": {
"gnutls": ["1.0", "2.0"],
"openssl": "0.9.8"
}
}
}
相關文章
相關標籤/搜索