nodeJS---模塊與npm包管理工具
一:從模塊外部訪問另一個模塊內的成員;
假如我現在還在D盤中的node文件夾內中的app.js代碼改成如下:
var msg = 'hello';
var funName = function(){
return 1;
}
exports.msg = msg;
exports.funName = funName;
使用exports對象將模塊中的成員對外可以訪問,之后我在同目錄下新建app2.js,來調用app.js內的成員msg和funName函數,如下代碼:
var foo = require('./app');
console.log(foo.msg);
console.log(foo.funName());
運行如下所示:
即可看出可以在模塊A內調用模塊B的成員,只需要使用exports對象即可。
那么現在假如模塊是一個類的話(在javascript叫構造函數),比如現在app.js代碼改成如下的:
function App(name,age){ this.name = name; this.age = age; } App.prototype = { setName: function(name){ this.name = name; }, getName: function(){ return this.name; } } exports.App = App;
還是使用exports.App導出類的話,就會報錯,我們現在在app2.js調用如下:
var foo = require('./app'); var myFoo = new foo("longen",'28'); console.log(myFoo.getName());
就會報錯,如下所示:
但是呢 如果我們在app.js內使用module.exports導出的話。就ok了,exports是module的一個屬性。app.js代碼改成如下:
function App(name,age){ this.name = name; this.age = age; } App.prototype = { setName: function(name){ this.name = name; }, getName: function(){ return this.name; } } module.exports = App;
接着運行app2.js代碼如下所示:
可以執行了;
二:組織與管理模塊
如何加載一個模塊的基本知識點,這里先略,如果想要更詳細的了解的話,可以看看朴靈寫的深入淺出的nodejs,那邊書的理論很詳細;
1. 模塊對象的屬性
在模塊文件內部,可以訪問當前模塊的如下所示的一些屬性;
module.id: 屬性值為當前模塊的ID。在默認情況下,主模塊的ID屬性值為”.” 其他模塊的ID屬性值為該模塊文件的絕對路徑,在模塊文件中可以修改當前模塊的ID屬性值。
如下app.js代碼改成如下:
console.log(module.id);
module.id = "longen2";
console.log(module.id);
在app2.js中調用var foo = require('./app'); 然后執行如下:
可以看到module.id改為longen2;
Module.filename: 屬性值為當前模塊文件的文件名;現在我們把foo.js改成如下:console.log(module.filename);
app2.js不變,直接調用,運行如下:
module.loaded: 屬性值為布爾值,當屬性值為false時表示模塊尚未加載完畢,屬性值為true時表示模塊加載完畢。下面是app.js改成如下:
console.log(module.loaded);
繼續執行如下所示:
module.parent: 屬性值為當前模塊的父模塊對象,即調用當前模塊的模塊對象,現在foo.js改為如下:
function App(name,age){ this.name = name; this.age = age; } App.prototype = { setName: function(name){ this.name = name; }, getName: function(){ return this.name; } } module.exports = App; console.log(module.parent);
繼續調用app2.js,打印如下:
module.children: 屬性值為一個數組,其中存放了當前模塊的所有子模塊對象,即當前模塊中已加載的所有模塊對象。如上圖所示
三:包與npm包管理工具。
在nodejs中,可以通過包來對一組具有相互依賴關系的模塊進行統一管理。一個包其實就是一個目錄,其中包含了用於對包進行描述的JSON格式的package.json文件,在一個包中,通常包含如下所示的內容:
1) 在包的根目錄存放package.json文件。
2) 在bin子目錄中存放二進制文件。
3) 在lib子目錄中存放javascript文件。
4) 在doc子目錄存放對包和包的使用方法進行說明的文檔。
5) 在test子目錄中存放一些對包進行單元測試的測試用例。
在一個package.json文件中,一個package.json文件中通常應該包含如下字段,下面分別對這些字段進行說明如下:
1) name, 包名。包名是唯一的,由小寫字母,數字和下划線組成,不能包含空格。
2) preferglobal, 是否支持全局安裝。字段值為true是支持全局安裝,為false時不支持全局安裝。
3) description, 包說明。對包進行簡要概述.
4) vrsion, 版本號。
5) author 作者信息數組。每個數組元素中可包含name(作者姓名)字段,email(作者e-mail),web(作者網址)字段。
6) maintainers, 包維護者信息數組。每個數組元素中可包含name(包維護者的姓名)字段,email(包維護者Email)字段,web(包維護者的網址)字段。
7) bugs, bug的提交地址,可以是網址或電子郵件。
8) licenses. 許可證數組。每個元素要包含type(許可證名稱)和url(鏈接到許可證文本的地址)字段。
9) repository, 倉庫托管地址數組。每個元素要包含type(倉庫類型,如Git),url(倉庫地址)和path(相對於倉庫的路徑,可選)字段。
10)keywords, 關鍵字數組,通常用於搜索。
11)dependencies, 本包所依賴的包。是一個關聯的數組,有包名和版本號組成。
下面我們來看看如何在項目的根目錄下創建一個package.json,當然我們可以手動創建package.json,我們也可以進入我們的項目的根目錄后,使用命令窗口來創建,如下我現在還是使用我們node文件夾作為包目錄。下面我們先進入node包內,然后執行 命令 npm init;
之后在我node目錄下生成一個package.json,內容如下:
{ "name": "bag", "version": "0.0.1", "description": "\"A simple demo\"", "main": "app.js", "scripts": { "test": "\"a demo\"" }, "repository": { "type": "git", "url": "https:github.com/tugenhua0707" }, "keywords": [ "[\"longen\"]" ], "author": "longen", "license": "BAT" }
當然還有一些依賴包,我們需要的時候可以手動加進去。
現在我們先來看看如何發布包了;
一:我們在F盤目錄下新建一個包名為publicbag,包名盡量不要取名和node或者javascript有關的名字,然后把app.js和package.json復制到該文件夾內,package中的包名改成 publicbag了;現在我們先進入包publicbag內 執行命令安裝express依賴包,需要生成node_module目錄;如下:
npm install express
就在publicbag包內生存文件node_module文件了,如下:
我們也可以全局安裝,如下:
npm install express –g
可以看到如上的路徑,安裝到npm的路徑下了。
一:下面我們可以來看看如何使用npm打包發布nodejs程序包了;
- 首先在npmjs.org注冊一個賬號,如下:
2. 通過npm adduser來注冊新賬號或登錄老賬號:
如下所示:
3. 通過命令 npm publish . 發布包了,如下所示:
我們可以登錄npm查看已經發布的包,如下:
可以看到publicbag是我們剛剛發布的包~。
二:如何下載我們剛剛發布的包?
下面我們還是進入F盤后,新建文件夾loadBag文件,然后進入命令行窗口后,進入loadBag文件內,使用命令 npm install publicbag 即可把publicbag包下載到loadBag文件內,如下所示:
然后在loadBag文件內生存包publicbag,如下所示:
當然我們也可以全局下載安裝;npm install publicbag –g 如下:
就自動下載到我們npm安裝包路徑下了;
npm 包管理工具;
在node.js中,提供了一個npm包管理工具,該管理工具可用第三方網站上下載node.js包。我們可以在命令行中,通過不同的命令輸入以執行npm包管理工具中的各種功能。
- 可以通過如下所示的命令來卸載命令行提示窗口當前目錄下安裝的某個包:
npm uninstall <包名>
2. 可以通過如下所示的命令來卸載Node.js的全局包的安裝路徑下的安裝的某個包。
npm uninstall -g <包名>
3. 可以通過如下所示的命令來更新命令行提示窗口當前目錄下安裝的某個包。
npm update <包名>
4. 可以通過如下所示的命令來更新Node.js的全局包的安裝路徑下安裝的某個包。
npm update –g <包名>
5. 可以通過如下所示的命令來更新命令行提示窗口當前目錄下安裝的所有包。
npm update
6. 可以通過如下所示的命令來更新Node.js的全局包的安裝路徑下安裝所有包。
npm update -g