一文詳解Node中module.exports和exports區(qū)別
一、當(dāng)使用分別暴露時(shí),module.exports和exports是一樣的
math.js
const add = (a, b) => a + b const subtract = (a, b) => a - b module.exports.add = add module.exports.subtract = subtract
index.js
const math = require('./math')
console.log(math.add(2, 3))
console.log(math.subtract(2, 3))
執(zhí)行 node .\index.js會(huì)打印5和-1
此時(shí),若你在math.js中使用exports分別暴露時(shí)也是可以的:
// module.exports.add = add // module.exports.subtract = subtract exports.add = add exports.subtract = subtract
二、當(dāng)使用統(tǒng)一暴露時(shí),它倆是不一樣的
module.exports的統(tǒng)一暴露
實(shí)際中我們經(jīng)常這樣寫
module.exports = { add, subtract }
此時(shí)執(zhí)行node index還是會(huì)打印5和-1
使用exports同一個(gè)暴露
// module.exports = { add, subtract }
exports = { add, subtract }
此時(shí)再執(zhí)行node index會(huì)報(bào)錯(cuò):
TypeError: math.add is not a function
三、為什么exports可以分別暴露,但不能統(tǒng)一暴露
觀察源碼里這幾句代碼:
const exports = this.exports; const thisValue = exports; const module = this;

由此可見,exports和module.exports指向同一個(gè)對(duì)象。所以當(dāng)你使用分別暴露時(shí),實(shí)質(zhì)上是給這個(gè)對(duì)象上添加了一個(gè)個(gè)屬性,這兩種方式是同一個(gè)意思。
但是,一旦寫成統(tǒng)一暴露,exports = { add, subtract }改變了exports的指向,切斷了與module.exports之間的引用關(guān)系,exports不再是module.exports的那個(gè)對(duì)象了
四、總結(jié)
- 一般情況下,我們都會(huì)使用module.exports統(tǒng)一暴露,即導(dǎo)出一個(gè)對(duì)象
- 如果使用分別暴露,module.exports和exports是一樣的,此時(shí)exports是module.exports的簡(jiǎn)寫,但很少這樣做
以上就是一文詳解Node中module.exports和exports區(qū)別的詳細(xì)內(nèi)容,更多關(guān)于Node module.exports區(qū)別exports的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
nodejs實(shí)現(xiàn)一個(gè)word文檔解析器思路詳解
這篇文章主要介紹了nodejs實(shí)現(xiàn)一個(gè)word文檔解析器的思路詳解,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-08-08
詳解一個(gè)基于套接字實(shí)現(xiàn)長(zhǎng)連接的express
這篇文章主要介紹了詳解一個(gè)基于套接字實(shí)現(xiàn)長(zhǎng)連接的express,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03
輕松創(chuàng)建nodejs服務(wù)器(4):路由
這篇文章主要介紹了輕松創(chuàng)建nodejs服務(wù)器(4):路由,服務(wù)器需要根據(jù)不同的URL或請(qǐng)求來執(zhí)行不一樣的操作,我們可以通過路由來實(shí)現(xiàn)這個(gè)步驟,需要的朋友可以參考下2014-12-12

