node中模塊

 

 

爲了編寫可維護的代碼,我們把很多函數分組,分別放到不同的文件裏,這樣,每個文件包含的代碼比較少,在node中,一個js文件就是一個模塊module,

當一個模塊編寫完畢,就可以被其他地方引用。我們在編寫程序的時候,也經常引用其他模塊,包括Node內置的模塊和來自第三方的模塊。

使用模塊還可以避免函數名和變量名衝突,相同名字的函數和變量可以分別存在不同的模塊中,因此,我們自己在編寫模塊時,不必考慮名字會與其他模塊衝突。

hello.js中 模塊名字就是hello 我們可以將該模塊暴露出去,給外部使用。

'use strict';
var s = 'hello';
function name(name){
    console.log(s + ',' + name);
}
module.exports = greet;

最後一句話的意思就是,把greet暴露出去,這樣其他模塊就可以使用greet函數了。

其他模塊使用hello中的greet函數。

'use strict';
//引入hello模塊
var greet = require('./node');
greet('ckq');

引入的模塊作爲變量存在於greet變量中,greet變量是hello.js中我們導出的module.exports = greet 所以main.js就成功地引用了hello.js模塊中定義的greet()函數,接下來就可以直接使用它了。

在使用require()引入模塊的時候,請注意模塊的相對路徑,因爲main和hello位於同一個目錄下,所以我們用了當前目錄.

如果只寫模塊名,var greet = require('hello');

則node會依次在內置模塊,全局模塊和當前模塊下查找hello.js,很可能會得到一個錯誤。

這種模塊加載的機制被稱爲commonjs規範,每個.js文件都是一個模塊,他們內部各自使用的變量名和函數名互相不衝突,例如hello.js中的變量名xxx 和main.js中的變量名xxx就是互相不衝突的。

一個模塊想要對外暴露變量,函數也是變量,可以用module.exports = variable,一個模塊要引用其他模塊中的變量,就要使用

var ref = require('./module_name'); 就拿到了引用模塊的變量。

結論

要在模塊中對外輸出變量,用:

module.exports = variable;

輸出的變量可以是任意對象、函數、數組等等。

要引入其他模塊輸出的對象,用:

var foo = require('other_module');

引入的對象具體是什麼,取決於引入模塊輸出的對象。

node 利用了js的函數式編程的特性,原來的全局變量現在就變成了匿名函數內部的局部變量。

如果Node.js繼續加載其他模塊,這些模塊中定義的“全局”變量s也互不干擾。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章