1. 程式人生 > >8.創建包

8.創建包

規範 網址 req 單元測試 代碼 目錄 許可 keywords fun

包是在模塊基礎上更深一步的抽象,它將某個獨立的功能封裝起來,用於發布、更新、依賴管理和版本控制。
Node.js 的包是一個目錄,其中包含一個 JSON 格式的包說明文件package.json 。嚴格符合 CommonJS規範的包應該具備以下特征:

    1.package.json 必須在包的頂層目錄下;  
    2.二進制文件應該在 bin  目錄下;  
    3.JavaScript 代碼應該在 lib  目錄下;  
    4.文檔應該在 doc  目錄下;  
    5.單元測試應該在 test  目錄下。

Node.js 對包的要求並沒有這麽嚴格,只要頂層目錄下有 package.json ,並符合一些規範即可。當然為了提高兼容性,我們還是建議你在制作包的時候,嚴格遵守 CommonJS 規範。

1. 作為文件夾的模塊

模塊與文件是一一對應的。文件不僅可以是 JavaScript代碼或二進制代碼,還可以是一個文件夾。最簡單的包,就是一個作為文件夾的模塊。

// 建立一個叫做 somepackage  的文件夾,在其中創建 index.js
exports.hello = function(){
    console.log("hello.");
};

// 然後在  somepackage  之外建立 getpackage.js ,內容如下: 
var somePackage = require("./somepackage");
somePackage.hello();    // hello
// 我們使用這種方法可以把文件夾封裝為一個模塊,即所謂的包。包通常是一些模塊的集合,在模塊的基礎上提供了更高層的抽象,相當於提供了一些固定接口的函數庫。
通過定制 package.json,我們可以創建更復雜、更完善、更符合規範的包用於發布。

package.json
在前面例子中的 somepackage 文件夾下,我們創建一個叫做 package.json 的文件,內容如下所示:

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

// 然後將 index.js  重命名為 interface.js  並放入lib子文件夾下。以同樣的方式再次調用這個包,依然可以正常使用。
// Node.js 在調用某個包時,會首先檢查包中 package.json  文件的 main 字段,將其作為包的接口模塊,如果 package.json或main字段不存在,會嘗試尋找 index.js  或 index.node  作為包的接口。 

package.json 是 CommonJS 規定的用來描述包的文件,完全符合規範的 package.json文件應該含有以下字段。

1.name:包的名稱,必須是唯一的,由小寫英文字母、數字和下劃線組成,不能包含空格。 
2.description:包的簡要說明。 
3.version:符合語義化版本識別規範的版本字符串。 
4.keywords :關鍵字數組,通常用於搜索。 
5.maintainers:維護者數組,每個元素要包含name、email(可選)、web  (可選)字段。 
6.contributors:貢獻者數組,格式與maintainers相同。包的作者應該是貢獻者數組的第一個元素。 
7.bugs:提交bug的地址,可以是網址或者電子郵件地址。 
8.licenses :許可證數組,每個元素要包含 type (許可證的名稱)和 url  (鏈接到許可證文本的地址)字段。 
9.repositories:倉庫托管地址數組,每個元素要包含 type (倉庫的類型,如 git  )、url(倉庫的地址)和  path  (相對於倉庫的路徑,可選)字段。 
10.dependencies:包的依賴,一個關聯數組,由包名稱和版本號組成。 

8.創建包