nodejs-模組(Module) & 套件(Package)

模組(Module) & 套件(Package)
1.1一個Node.js檔案就是一個模組,這檔案可能是js程式、json或編譯過的c/c++擴充
1.2建立module.js
var name;
exports.setName=function(_name){
name=_name;
};

exports.sayHi=function(){
console.log('Hi! '+name);
}
1.3建立getmodule.js
var my_module=require('./module');
my_module.setName('By');
my_module.sayHi();

1.4執行getmodule.js,出現
Hi! By

1.5關於require & exports
require是用來取得模組的介面
exports是模組公開的介面

1.6require不會重複載入模組
修改getmodule.js如下:
var my_module1=require('./module');
my_module1.setName('my_module1');
my_module1.sayHi();

var my_module2=require('./module');
my_module2.setName('my_module2');
my_module1.sayHi();

執行結果:
Hi! my_module1
Hi! my_module2

我們兩次都是呼叫my_module1,卻發現第二次呼叫的my_module1的值被,my_module2給蓋過,表示my_module1跟my_module2指向同一個實例

1.6簡化exports
有時只想把物件封裝到模組中,建立obj.js內容如下:

function Hi(){
var name;
this.set_name=function(_name){
name=_name;
};

this.say=function(){
console.log("Hi! "+name);
}
}

exports.Hi=Hi;

想取用時,建立getobj.js,內容如下:

var HiClass=require('./obj.js').Hi;
var obj=new HiClass();
obj.set_name('my');
obj.say();

因為用require('./obj.js').Hi;來取用物件有點多餘,所以可以改成下面稍微簡化:

obj.js內容如下:

function Hi(){
var name;
this.set_name=function(_name){
name=_name;
};

this.say=function(){
console.log("Hi! "+name);
}
}

//exports.Hi=Hi;
module.exports=Hi;

getobj.js,內容如下:

//var HiClass=require('./obj.js').Hi;
var HiClass=require('./obj.js');
var obj=new HiClass();
obj.set_name('my');
obj.say();
Category:

0 意見: