common.js規(guī)范
nodejs由許多模塊組成捌朴,每個模塊就是一個文件,node模塊采用了commonjs規(guī)范宏侍。
根據(jù)commonjs規(guī)范桥帆,一個單獨的文件就是一個模塊医增,每一個模塊都是單獨的作用域也就是說,在一個文件定義的變量老虫,都是private的叶骨,對其他文件是不可見的。
var x = 5;
var add = function(value){return value + x;}
上面代碼中祈匙,變量x和函數(shù)add,是當前文件private的忽刽,其他文件不可見。
如果想在多個文件中分享變量夺欲,必須定義為global的屬性跪帝。
global.a = a;
上面的a變量,可以被所有的文件讀取洁闰,當然歉甚,這樣的寫法是不推薦的。
commonjs規(guī)定扑眉,每個文件的對外接口是module.exports對象,這個對象的所有屬性和方法赖钞,都可以被其他文件導(dǎo)入腰素。
module對象
每一個模塊內(nèi)部,都有一個module對象雪营,代表當前模塊弓千,它有以下屬性:
- module.id 模塊的識別符 通常是帶有絕對路徑的模塊文件名
- module.filename 模塊的文件名, 值為此模塊的絕對路徑
- module.loaded 返回一個布爾值献起,表示本模塊是否已經(jīng)加載完成
- module.parent 返回一個對象洋访,表示調(diào)用該模塊的模塊
- module.children 返回一個數(shù)組镣陕,代表該模塊要用到的其他模塊
666.png
模塊的加載規(guī)則
aa.jpg
查找文件的規(guī)則
aa.jpg
如何判斷模塊是直接被執(zhí)行還是被調(diào)用?
if(require.main === module){
console.log("直接執(zhí)行")
}else{
console.log("調(diào)用執(zhí)行");
}