Node.js Module.exports和exports

在NodeJS中,一般將代碼合理拆分到不同的JS文件中,每一個(gè)文件就是一個(gè)模塊,而文件路徑就是模塊名。每一個(gè)node.js執(zhí)行文件,都自動(dòng)創(chuàng)建一個(gè)module對(duì)象,同時(shí),module對(duì)象會(huì)創(chuàng)建一個(gè)叫exports的屬性,初始化的值是 {},用作文件的導(dǎo)出。

創(chuàng)建一個(gè)main.js,打印moudle

console.log(module);

module

Node為每個(gè)模塊提供一個(gè)exports變量,指向module.exports??梢酝ㄋ椎睦斫鉃椋篹xports和module.exports指向同一個(gè)對(duì)象,及exports = module.exports = {};。
給Module.exports添加屬性類似于給exports添加屬性。例如:

module.exports.name = function() { 
console.log('My name is kevin'); 
}; 

同樣,exports是這樣的 :

exports.name = function() { 
console.log('My name is kevin'); 
}; 

module.exports

(1)程序?qū)С龅挠肋h(yuǎn)是 module.exports
(2)如果你創(chuàng)建了 既有 exports 又有 module.exports 的模塊,那它會(huì)返回 module.exports(如下圖)


為什么要拿一個(gè) exports 來(lái)做 module.exports 的引用?而不是直接使用 module.exports ?
其實(shí)是為了保證,模塊的初始化環(huán)境是干凈的。同時(shí)也方便我們,即使改變了 module.exports 指向的對(duì)象后,依然能沿用 exports的特性。通過(guò)exports = module.exports的方法,讓其恢復(fù)原來(lái)的特點(diǎn)。

使用場(chǎng)景

什么情況下使用module.exports,什么時(shí)候用exports?
如果你想你的模塊是一個(gè)特定的類型就用Module.exports。如果你想的模塊是一個(gè)典型的“實(shí)例化對(duì)象”就用exports;及你的模塊屬于“模塊實(shí)例(module instances)”,就像官方文檔中給出的示例那樣,那么exports足以滿足要求。
最后用官方的一句話,簡(jiǎn)述兩者區(qū)別:

If you want the root of your module’s export to be a function (such as a constructor) 
or if you want to export a complete object in one assignment instead of building it one property at a time, 
assign it to module.exports instead of exports.
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 33、JS中的本地存儲(chǔ) 把一些信息存儲(chǔ)在當(dāng)前瀏覽器指定域下的某一個(gè)地方(存儲(chǔ)到物理硬盤中)1、不能跨瀏覽器傳輸:在...
    萌妹撒閱讀 2,246評(píng)論 0 2
  • 模塊通常是指編程語(yǔ)言所提供的代碼組織機(jī)制,利用此機(jī)制可將程序拆解為獨(dú)立且通用的代碼單元。所謂模塊化主要是解決代碼分...
    MapleLeafFall閱讀 1,254評(píng)論 0 0
  • 1 Node.js模塊的實(shí)現(xiàn)# 之前在網(wǎng)上查閱了許多介紹Node.js的文章,可惜對(duì)于Node.js的模塊機(jī)制大都...
    七寸知架構(gòu)閱讀 2,152評(píng)論 1 50
  • 最近正在學(xué)習(xí)nodejs,看到nodejs模塊這塊,發(fā)現(xiàn)nodejs模塊有兩種方式對(duì)外暴露方法exports和mo...
    程序魚閱讀 6,102評(píng)論 9 33
  • 森森差不多是從高二上學(xué)期十月份中旬開始發(fā)福,,并且還對(duì)不起一個(gè)真心真意待我,對(duì)我百般忍讓百般討好的姐們,,是的,我...
    餅森森閱讀 228評(píng)論 0 1

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