包是在模塊基礎上更深一步的抽象,它將某個獨立的功能封裝起來,用於發佈、更新、依賴管理和版本控制。
Node.js 的包是一個目錄,其中包含一個 JSON 格式的包說明文件package.json 。嚴格符合 CommonJS規範的包應該具有如下特徵: node
1.package.json 必須在包的頂層目錄下; 2.二進制文件應該在 bin 目錄下; 3.JavaScript 代碼應該在 lib 目錄下; 4.文檔應該在 doc 目錄下; 5.單元測試應該在 test 目錄下。
Node.js 對包的要求並無這麼嚴格,只要頂層目錄下有 package.json ,並符合一些規範便可。固然爲了提升兼容性,咱們仍是建議你在製做包的時候,嚴格遵照 CommonJS 規範。git
1. 做爲文件夾的模塊web
模塊與文件是一一對應的。文件不只能夠是 JavaScript代碼或二進制代碼,還能夠是一個文件夾。最簡單的包,就是一個做爲文件夾的模塊。json
// 創建一個叫作 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:包的依賴,一個關聯數組,由包名稱和版本號組成。