CommonJS規(guī)范

一、CommonJS規(guī)范

1、簡介

Node應(yīng)用由模塊組成,采用CommonJS規(guī)范。每一個文件就是一個模塊,有自己的作用域。在一個文件里面定義的變量、函數(shù)、類都是私有的,對其他文件不可見。

2、基本語法
  • 定義暴露模塊: exports.xxx = value 或者module.exports = value
  • 引入模塊:require(xxx),如果是Node提供的核心模塊,xxx就是模塊名稱;如果是由用戶編寫的文件模塊,xxx為文件模塊的路徑。
for example 1:
exports.name="jinggege";
exports.age = 18;
exports.add = function(a,b){
    return a+b;
}

引入模塊打印結(jié)果如下圖:

image

exports.xxx 是給exports對象添加屬性,可以多次添加.

for example 2:
module.exports = {
    name:'jinggege',
    age:18
}
module.exports = {
    add:function(a,b){
        return a+b;
    }
}

引入模塊打印結(jié)果如下圖:

image

module.exports 是給module對象的exports屬性賦值,再次添加會將上次的值覆蓋掉,只能添加一次。

3、實(shí)現(xiàn)原理

那CommonJS暴露的到底是什么呢?
CommonJS規(guī)范規(guī)定,每個模塊內(nèi)部,module變量表示當(dāng)前模塊。這個變量是一個對象,它的exports屬性(module.exports)是對外的接口。暴露模塊的本質(zhì)是:將exports對象暴露。加載某個模塊,其實(shí)是加載該模塊的exports屬性。
那在模塊中,我們并未看到定義module這個變量,這個變量到底是誰提供的呢?
我們通過在模塊中打印 arguments.callee 可以觀察到當(dāng)前執(zhí)行的函數(shù)對象

exports.a = 10
console.log(arguments.callee + '')
image

由打印結(jié)果我們可以發(fā)現(xiàn),當(dāng)node在執(zhí)行模塊代碼時,它會給代碼的外層裹上一個函數(shù),這個函數(shù)有五個參數(shù),分別是:

  • exports:該對象用來將變量或函數(shù)暴露到外部
  • require:函數(shù),用來引入外部的模塊
  • module:module代表的是當(dāng)前模塊本身,exports就是module的屬性,所以我們既可以使用exports導(dǎo)出,也可以使用module.exports導(dǎo)出。
  • __filename : 表示當(dāng)前模塊的完整路徑
  • __dirname:表示當(dāng)前模塊所在文件夾的完整路徑
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容