淺談node模組與npm包管理工具,淺談nodenpm包管
在Node.js中,以模組為單位劃分所有的功能,並且提供了一個完整的模組載入機制,所以我們可以將應用程式劃分為各個不同的部分,並且對這些部分進行很好的協同管理。通過將各種可重用代碼編寫在各種模組中的方法,可以大大減少應用程式的代碼量,提高應用程式的開發效率以及應用程式代碼的可讀性。通過模組載入機制,可以將各種第三方模組引入到我們的應用程式中。
在node.js中,提供npm包管理工具,用於從第三方網站上下載各種Node.js包。
一、模組
1.1 載入模組
在Node.js中,以模組為單位劃分所有的功能,一個Node.js應用程式由大量的模組組成,每一個模組都是一個JavaScript檔案,在載入node.js中預先定義的核心模組,我們只需要require('模組名'),例如require('http'),在將第三方類庫引入到我們的應用程式時,需要指定該檔案的完整路徑及檔案名稱,例如 require('./script/foo.js')
1.2 訪問模組
1.2.1使用exports對象訪問
在一個模組檔案中定義變數、函數或對象只在該模組內有效,當你需要從外部模組引用這些變數、函數或對象時,需要再改模組內,例如,建一個testModule.js,代碼如下:
var testVar = "Can you see me now ? ";var funName = function(name){ console.log('My name is' + name);}exports.testVar = testVar ;exports.funName = funName ;
那麼我們想在http.js中使用這些變數、函數或對象,可在http.js中書寫如下代碼:
var test1 = require('./testModule.js');// 通過test1訪問testModule.js模組內的testVar變數 和funName函數console.log(test1.testVar)test1.funName('Luckfine')
node 運行下這個http.js node http.js
運行結果如下
1.2.2使用module.exports對象訪問
當你需要從外部模組引用這些變數、函數或對象時,使用exports對象,也可以使用module.exports,但是需要將模組定義一個類時,只能用module.exports。
例如定義一個testModule類,在testModule.js中如下代碼:
var _name,_agevar name = '',age = 0;var foo = function(name,age){ _name = name ; _age = age ;}// 擷取私人變數_name的變數只foo.prototype.GetName = function(name){ return _name;};// 設定私人變數_name的變數值foo.prototype.SetName = function(name){ _name = name;}// 擷取私人變數_age的變數只foo.prototype.GetAge = function(age){ return _age;};// 設定私人變數_name的變數值foo.prototype.SetAge = function(age){ _age = age;}foo.prototype.name = name;foo.prototype.age = age;module.exports = foo;
那麼我們想在http.js中使用這個類的變數、函數或對象,可在http.js中書寫如下代碼:
var foo = require('./testModule.js');var myFoo = new foo('Luckfine',18);console.log('擷取修改前的私人變數值')console.log(myFoo.GetName());console.log(myFoo.GetAge());console.log('修改私人變數');myFoo.SetName('Baby');myFoo.SetAge(16);console.log('擷取修改後的私人變數值')console.log(myFoo.GetName());console.log(myFoo.GetAge());console.log('擷取修改前的公有變數值')console.log(myFoo.name);console.log(myFoo.age);console.log('修改公有變數')myFoo.name = "Tom";myFoo.age = 20;console.log('擷取修改後的公有變數值')console.log(myFoo.name);console.log(myFoo.age);
然後在iTerm中運行node http.js命令,運行結果如下所示
總結以上:
也就是說,js檔案和js檔案之間有兩種合作的模式:
1) 某一個js檔案中,提供了函數,供別人使用。 只需要暴露函數就行了; exports.msg=msg;
2) 某一個js檔案,描述了一個類。 module.exports = People;
二、npm包管理
npm是跟隨Node.js一起的包管理工具,能解決Node.js代碼部署上的很多問題,當我們使用npm去安裝一些第三方庫的時候,安裝包會放在運行npm命令時所在的目錄中的node_modules檔案夾中,如果目前的目錄下沒有node_modules,會在目前的目錄下產生node_modules目錄,並把我們需要的第三方庫放在node_modules中。
所以在安裝的時候,要注意,命令提示字元所在的位置。
安裝第三方庫的命令 npm install 模組名字, 假如我們需要安裝express,那麼只需要在命令列中輸入npm install express
1.我們的依賴包,可能在隨時更新,我們永遠想保持更新,或者某持某一個版本;
2.項目越來越大的時候,給別人看的時候,沒有必要再次共用我們引用的第三方模組。
所以我們可以使用package.json來管理依賴包。
在cmd中,使用npm init可以初始化一個package.json檔案,用回答問題的方式產生一個新的package.json檔案。
產生package.json的作用就是,如果一不小心我們丟了什麼依賴,那麼只要我們直接npm install就可以安裝package.json中的缺失的依賴;
package.json中版本號碼前面有一個尖角號,表示固定版本,即固定使用我現在安裝的版本;
例如我們現在建立一個檔案夾
1、建立檔案夾
我們現在需要安裝一個第三方庫express,就先進入這個檔案夾,開啟命令列,在此輸入 npm install express'' 等命令列完成之後,我們會看到在檔案夾中就建立了一個node_modules檔案夾,並且把我們需要的庫已經安裝在檔案夾中
2、安裝後檔案夾中內容
然後我們需要一個package.json管理我們的包,就可以在命令列中輸入npm init,這時可已根據命令列的提示回答問題建立package.json
3、建立package.json
那麼我們這個項目的一些依賴,版本號碼,描述,作者等都可以通過package.json進行相應管理。
4、包管理
我這個包管理內容比較少,那麼正常情況下package.jaon都有如下內容
三、模組對象的屬性
這個作為更深入的瞭解。
在模組檔案內部,可以訪問當前模組的如下一些屬性。
module.id : 表示該模組檔案的絕對路徑。
module.filename :屬性值為當前模組的檔案名稱
module.loaded :屬性值為布爾值,當屬性值為false時表示模組尚未載入完畢,反之為載入完畢。
module.parent:屬性值為當前模組的父模組對象,即調用當前模組的模組對象
module.children:屬性值為一個數組,其中存放了當前模組所有子模組對象,即當前模組中已載入的所有模組對象。
以上就是本文的全部內容,希望對大家的學習有所協助,也希望大家多多支援幫客之家。