1. 程式人生 > >【第四節 Node.js模塊和包】

【第四節 Node.js模塊和包】

可選 obj hello keyword tor 簡單 enc mod ima

概念:模塊(Module)和包(Package)是Node.js最重要的支柱。開發一個具有一定規模的程序不可能只用一個文件,通常需要把各個功能拆分、分裝、然後組合起來。模塊正式為了實現這種方式而誕生,在瀏覽器JavaScript中,腳本模塊的拆分和組合通常使用HTML的script標簽來實現,Node.js提供了require函數來調用其他模塊,而且模塊都是基於文件,機制非常簡單,模塊和包的區別是透明的,因此經常不作區分。 一、模塊 1.什麽是模塊 模塊和文件是一一對應的。一個Node.js文件就是一個模塊,這個文件可能是JavaScript代碼、JSON或者編譯過的C/C++擴展。 var http=require(‘http‘),其中http是Node.js的一個核心模塊,通過require函數獲取這個模塊,然後使用其中的對象 2.創建及加載模塊 (1)創建模塊 Node.js提供了exports和require兩個對象,其中exports是模塊公開的接口,require用於從外部獲取一個模塊的接口,即獲取模塊的exports對象    通過同級下兩個js文件:module.js和getModule.js的實現:       技術分享

      技術分享

      運行結果:

      技術分享

  (2)單次加載 上面的例子有點類似創建一個對象,但實際上和對象又有本質的區別,因為require不會重復加載模塊,也就是說無論調用多少次require,獲取的模塊都是同一個   將⑴中getModule.js改為getModule2.js:        技術分享        運行結果:        技術分享 (3)覆蓋exports 有時我們只是想把一個對象封裝到模塊中,例如 定義模塊:singleobejct.js 引入模塊使用:getSingleObject.js   A.繁瑣:exports.hello=hello;      引入:require("./singleobject").hello;    B.簡易:module.exports=hello;       技術分享

      技術分享

      運行結果:

      技術分享

exports本身僅僅是一個普通的空對象,即{},它是專門用來聲明接口 二、創建包 1.包的概念 包是在模塊基礎上更深一步的抽象,Node.js的包類似於C/C++的函數庫或者java的類庫,它講某個獨立的功能封裝起來,用於發布、更新、依賴管理的版本控制。開發了npm來解決包的發布和獲取需求。 2.如何創建一個包 CommonJS規範的包應該具備一下特征: package.json必須在包的頂層目錄下 二進制文件應該在bin目錄下 javaScript代碼應該在lib目錄下 文檔應該在doc目錄下 單元測試應該在test目錄下 Node.js對包要求並沒有那麽嚴格,只要頂層目錄下有package.json,並符合基本規範即可       技術分享
(1)作為文件夾的模塊 somepackage文件夾 最簡單的包,就是一個作為文件夾的模塊, 創建一個文件夾 somepackage,裏面有一個index.js,裏面提供一個方法sayHello() var somepackage=require(‘./somepackage‘); somepackage.sayHello(); 我們使用這種方法可以把文件夾封裝成一個模塊,即所謂的包。包通常是一些模塊的集合,在模塊的基礎上提供了更高層的抽象,相當於提供了一些固定接口的函數庫,通過定制package.json,我們可以創建更復雜、更完善、更符合規範的包用於發布。       技術分享

      技術分享

(2)package.json 前面的例子,在somepackage文件夾下,我們創建一個package.json的文件,內容 { ‘main‘:‘./lib/index.js‘ } Node.js在調用某個包時,會檢查包中package.json文件的main字段,將其作為包的接口模塊,如果package.json或main字段不存在,會常事尋找index.js或index.code作為包的接口              package.json:       技術分享

      技術分享

      

      註意路徑和文件格式package.js:

      技術分享

      技術分享

package.json的規範屬性: name:包的名稱,必須是唯一 description:包的簡要說明 version:符合語義化版本識別規範的版本字符串 keywords:關鍵字數據,通常用於搜索 maintainers:維護者數組,每個元素要包含name、email、web可選字段 contributors:貢獻者數組,格式與maintainers相同。包的坐著應該是貢獻者數據的第一個元素 bugs:提交bug的地址,可以是網址或者電子郵件地址 licenses:許可證數組,每個元素要包含type和url字段 repositories:倉庫托管地址數組,每個元素要包含type、url和path字段 dependencies:包的依賴,一個關聯數組,由包名稱和版本號組成。            ⑶ 新建getPackage.js,運行結果:              技術分享

      技術分享

【第四節 Node.js模塊和包】