在以前的學習中咱們使用require()
來引入咱們須要的包,這其實就是模塊化,各模塊相互獨立,能夠經過某種方式引入別的模塊。而這些引入方式都是遵循必定的規範的,這就是CommonJS規範。java
目前JS標準定義的API是爲了構建基於瀏覽器的應用程序,沒有制定一個用於更普遍的應用程序的標準庫。CommonJS規範致力於提供一個相似java、python等語言的標準庫,使JS能夠開發服務器端應用程序、命令行工具、桌面圖形界面應用程序node
Node應用程序由各類模塊組成,採用CommomJS模塊規範。python
Nodejs中模塊分爲兩類,一類是由Node提供的核心模塊;另外一類是由用戶編寫的文件模塊。web
核心模塊在Node源代碼的編譯過程當中被編譯進了二進制文件。在Node進程啓動時,核心模塊會被直接加載進內存,因此在引入這些核心模塊時,文件定位和編譯執行這兩步能夠省略。而且在路徑分析中優先判斷,因此它的加載速度是最快的。HTTP模塊、URL模塊、fs模塊都是Node內置的核心模塊,能夠直接引用。數據庫
文件模塊則是在運行時動態加載,須要完整的路徑分析、文件定位、編譯執行過程,速度相比核心模塊稍微慢一些,可是用處很是多。這些模塊須要咱們本身定義,下面咱們來看一下自定義模塊。npm
咱們把公共的功能抽成一個單獨的js文件做爲一個模塊,默認狀況下外部是沒法訪問這個模塊裏的方法或者屬性。若是想讓外部訪問模塊內的屬性和方法,必須在模塊裏經過exports
或者module.exports
暴露須要被外部訪問的屬性和方法。json
在須要使用這些模塊的文件中經過require
引入該模塊。這樣就可使用這個模塊裏暴露的屬性和方法。瀏覽器
定義模塊,暴露屬性或方法服務器
//tools.js var tools = { name:'Node' sayHello:function () { return 'Hello NodeJs'; } } //暴露屬性或方法 //module.exports = tools; exports.add = tools.name; exports.sayHello = tools.sayHello;
在別的文件裏引入模塊模塊化
//引入自定義模塊 var tools = require('./tools'); //使用該模塊裏暴露的方法 tools.name; // Node tools.sayHello(); // Hello NodeJs
Nodejs中也可使用第三方模塊,Nodejs中第三方模塊由包組成,包又包含若干模塊,經過包來對一組具備相互依賴關係的模塊進行統一管理。
徹底符合CommonJs規範的包目錄通常包含以下這些文件:
咱們使用npm
安裝第三方模塊
npm install silly-datetime -Save
安裝完npm
後咱們就可使用這個包了:
var sd = require('silly-datetime'); sd.format(new Date(),'YYYY-MM-DD-HH:mm');
npm全稱Node Package Manager,是Node.js的包管理器。可使用它在Node.js應用程序中建立、共享和重用模塊。
模塊就是可重用的代碼庫。好比用來與數據庫交互的模塊、支持web開發的模塊以及經過web套接字協助通訊的模塊。
安裝模塊有兩種方式:本地安裝、全局安裝
本地安裝模塊意味着模塊會被安裝在項目內名爲node_modules的文件夾中,並且它只能夠在該項目中使用。這是推薦的安裝方式。
使用下列命令開始安裝模塊:
npm install [module_name]
這個命令意思是向服務器發送一個請求,將該模塊的最新版本下載到計算機上。當模塊下載成功後會有下列語句輸出:
module_name@1.2.0 ./node_modules/module_name
這行輸出告訴咱們模塊的名稱、版本以及下載的位置。
全局安裝意味着該模塊可在系統的任意地方使用。其餘與本地安裝一致。與本地安裝稍有不一樣的是全局安裝須要加上-g:
npm install [module_name] -g
要在Node.js應用程序中使用模塊,必須將其引入應用程序中,引入方法以下:
var module = require('module');
咱們把它賦值給一個變量,以便於在之後使用這個模塊。
有時候咱們須要查看模塊文檔,可使用一下命令:
npm docs [module_name]
這個命令必須在Node.js項目文件夾的根目錄下運行,而且該模塊已經下載到了node_modules文件夾下。
npm容許開發人員使用package.json文件來指定在應用程序中要使用的模塊,而且經過單個命令來安裝它們:
npm install
這樣作的好處有下列三點:
一個最小的package.json文件是這樣的:
{ "name":"example1", "version":"0.0.1", "dependencies":{ "underscore":"~1.2.1" } }