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

由此可見,exports和module.exports指向同一個對象。所以當你使用分別暴露時,實質(zhì)上是給這個對象上添加了一個個屬性,這兩種方式是同一個意思。
但是,一旦寫成統(tǒng)一暴露,exports = { add, subtract }改變了exports的指向,切斷了與module.exports之間的引用關(guān)系,exports不再是module.exports的那個對象了
四、總結(jié)
- 一般情況下,我們都會使用module.exports統(tǒng)一暴露,即導出一個對象
- 如果使用分別暴露,module.exports和exports是一樣的,此時exports是module.exports的簡寫,但很少這樣做
以上就是一文詳解Node中module.exports和exports區(qū)別的詳細內(nèi)容,更多關(guān)于Node module.exports區(qū)別exports的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
使用Typescript和ES模塊發(fā)布Node模塊的方法
這篇文章主要介紹了使用Typescript和ES模塊發(fā)布Node模塊的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-05-05
Nodejs中怎么實現(xiàn)函數(shù)的串行執(zhí)行
今天小編就為大家分享一篇關(guān)于Nodejs中怎么實現(xiàn)函數(shù)的串行執(zhí)行,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-03-03
解決nodejs報錯Error:EPERM:operation not permitted,mkdi
這篇文章主要介紹了解決nodejs報錯Error:EPERM:operation not permitted,mkdir‘xxxxxxxxxxxxxxxx‘問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-02-02

