Node.js模塊以及模塊加載機制

Node.js中的模塊javascript

    在Node.js中,以模塊爲單位劃分功能,經過一個完整的模塊加載機制使得開發人員能夠將應用程序劃分爲多個不一樣的部分。模塊的使用能夠提升代碼重用率,提升應用程序的開發效率,並且開發人員能夠根據具體的需求引入第三方模塊或者自定義模塊到應用程序中。     在Node.js中一個Node.js文件就是一個模塊,這樣的文件能夠是JavaScript代碼腳本,能夠是JSON,也能夠是編譯過的C/C++擴展。java

Node.js的核心模塊與文件模塊node

    在開發中可使用require()方法加載模塊,若是是加載Node.js的核心模塊,只須要將被加載的模塊的名稱做爲參數傳給require()便可,程序示例:json

var http = require('http');	//加載Node.js的核心模塊http模塊
var fs = require('fs');	//加載Node.js的核心模塊fs模塊

var server = http.createServer();	//使用http模塊建立服務
server.on('connection', function(request, response){	//經過on()方法監聽connection事件
	fs.readFile('./text.txt', function(err, data){	//使用fs模塊的readFile()方法讀取text.txt文件內容
		if(err){
			console.log('文件讀取時出現錯誤:' + err);
		}else{
			console.log(data.toString());
		}
	});
});

server.listen(8000, '127.0.0.1');

程序運行截圖:app

圖片1.png

    在使用require()方法加載模塊的時候,若是寫錯了模塊的名稱就會引發程序報錯,require()函數將會拋出異常,程序示例:函數

var http = require('aaaa');	//故意寫錯模塊名稱

var server = http.createServer();
server.on('connection', function(request, response){
	console.log(request.url);
});

server.listen(8000, '127.0.0.1');

程序運行截圖:ui

圖片2.png 如下的幾種文件能夠做爲Node.js的模塊文件:url

  • 後綴名爲.js的JavaScript腳本文件。
  • 後綴名爲.json的JSON文本文件。
  • 後綴名爲.node的通過編譯的二進制模塊文件。     在Node.js中加載模塊時須要指定模塊文件的完整路徑以及文件名稱。能夠是相對路徑也能夠是絕對路徑,程序示例:
  • (1)建立myModule.js:
var myFunction = function(){
	console.log('自定義模塊中的方法執行了。');
}

exports.myFunction = myFunction;
  • (2)建立module.js:
var myModule = require('./myModule.js');	//使用require()方法引入自定義模塊

myModule.myFunction();	//執行自定義模塊中的方法

    程序運行截圖:操作系統

圖片3.png

以類的方式定義模塊prototype

    在定義模塊時能夠將「exports」對象寫爲「module.exports」,可是在以類的方式定義模塊的時候只能寫作「module.exports」。程序示例:

  • (1)建立student.js模塊文件:
var _Name,_Age;
var Name = '', Age = 0;

//模塊對象的構造方法
var student = function(name, age){
	_Name = name;
	_Age = age;
}

//獲取私有變量_Name的值
student.prototype.GetName = function(){
	return _Name;
}

//設置私有變量_Name的值
student.prototype.SetName = function(name){
	_Name = name;
}

//獲取私有變量_Age的值
student.prototype.GetAge = function(){
	return _Age;
}

//設置私有變量_Age的值
student.prototype.SetAge = function(age){
	_Age = age;
}

student.prototype.Name = Name;
student.prototype.Age = Age;

module.exports = student;
  • (2)建立app.js文件:
var student = require('./student.js');

var s1 = new student('Tom', 12);
/*
*獲取模塊中的私有變量
*/
console.log('模塊中的私有變量:');
console.log('姓名:' + s1.GetName());
console.log('年齡:' + s1.GetAge());

//設置模塊中中公有變量的值
student.Name = 'Danny';
student.Age = 14;

/*
*獲取模塊中公有變量值
*/
console.log('模塊中的公有變量的值:');
console.log('姓名:' + student.Name);
console.log('年齡:' + student.Age);

程序運行截圖:

圖片4.png

加載node_modules目錄中的模塊

    在Node.js中使用require()方法加載模塊時只傳入了文件名稱做爲require()方法的參數,而沒有指明文件的路徑,

require(‘module.js’);	//只指定了文件的名稱,沒有指定文件的路徑

    則程序在運行的時候Node.js會將該文件視爲node_modules目錄下的文件。

經過目錄加載模塊

    在Node.js中,把目錄名稱指定爲模塊名,就能夠經過目錄對模塊進行管理。能夠直接require一個目錄,假設有一個目錄名爲folder,如:

var myMod = require('./folder');

    程序在運行的時候,Node將搜索整個folder目錄,Node會假設folder爲一個包並試圖找到包定義文件package.json。若是folder 目錄裏沒有包含package.json文件,Node會假設默認主文件爲index.js,即會加載index.js。若是index.js也不存在, 那麼加載將失敗。

從全局目錄中加載模塊

    若是在操做系統的環境變量中設置NODE_PATH變量,而且已經將變量值設置爲一個有效的磁盤目錄,在使用require()方法加載模塊時只指定了模塊的名稱而沒有指定模塊的路徑,並且Node.js從其餘路徑中找不到須要被加載的模塊文件時,Node.js將會從NODE_PATH變量值所指向的磁盤目錄中尋找並加載模塊文件。若是最終都沒有找到,require()方法就會拋出異常。

require()方法對模塊的查找策略

    Node.js的require()方法加載模塊時,對模塊文件的查找策略以下圖:

圖片5.png

相關文章
相關標籤/搜索