模組是nodejs中重要的概念 建立模組
建立一個檔案,取名為testerhome.js ,內容如下:
//testerhome.jsvar nameexports.setName = function(theName){ name = theName;};exports.sayName = function(){ console.log('Hello ' + name);};
引用模組
在同級目錄下建立一個test.js檔案
//test.jsvar testerHome = require('./testerhome');testerHome.setName('TesterHome');testerHome.sayName();
上面的檔案引用了我們定義的testerhome模組,然後設定其中屬性name的值,然後列印屬性name的值
執行上面的程式:
D:\node.js\0211>node test.jsHello TesterHomeD:\node.js\0211>
知識點
exports
第一個檔案testerhome.js中我們用到exports這個關鍵字,這個關鍵字定義的就是介面,可以供外部調用的。 單次載入
在test.js中我們使用require來載入一個模組,那如果多次載入的話會出現什麼狀況,現在修改下test.js中代碼:
//test.jsvar testerHome = require('./testerhome');testerHome.setName('TesterHome');var testerHome1 = require('./testerhome');testerHome1.setName('Tester Home2');testerHome.sayName();
上面的程式我們重新載入了一次模組並將其賦予了testerHome1變數。然後運行程式
D:\node.js\0211>node test.jsHello Tester Home2
你會驚奇的發現列印了第二個對象設定的名稱,為什麼。因為模組不會重複載入,只會覆蓋。所以整個程式只會有一個模組對象,所以上面的testerHome和testerHome1指向的都是同一個對象。 給模組添加對象
如果我們想給剛才的testerhome模組添加一個對象,如何添加呢。
請看下面的代碼:
//testerhome.jsvar nameexports.setName = function(theName){ name = theName;};exports.sayName = function(){ console.log('Hello ' + name);};function World(){ var name this.setName = function(theName){ name = theName; }; this.sayName = function(){ console.log('Hello ' + name); };};exports.World = World;
如何引用這個對象,其實我們事件那一篇文章用過,當時用的是events模組中的EventEmitter對象。
我們在test.js使用該World對象:
//test.jsvar testerHome = require('./testerhome');testerHome.setName('TesterHome');testerHome.sayName();var World = require('./testerhome').World;var world = new World;world.setName('World');world.sayName();
運行該程式:
D:\node.js\0211>node test.jsHello TesterHomeHello WorldD:\node.js\0211>
還有一種方式,匯入的時候不用寫.World。直接new對象的。修改testerhome.js檔案:
//testerhome.jsvar nameexports.setName = function(theName){ name = theName;};exports.sayName = function(){ console.log('Hello ' + name);};function World(){ var name this.setName = function(theName){ name = theName; }; this.sayName = function(){ console.log('Hello ' + name); };};module.exports = World;
變化的地方在於最後一句話把exports.World變成了module.exports。這樣我們在外部調用的時候就不需要再加入.World。test.js程式修改如下:
//test.jsvar World = require('./testerhome');var world = new World;world.setName('World');world.sayName();
運行該程式
D:\node.js\0211>node test.jsHello World