nodejs模塊中exports和module.exports的區(qū)別

CommonJS模塊規(guī)范

對于node執(zhí)行的每一個js文件,都會自動創(chuàng)建一個module模塊對象,如同一個封閉的函數(shù)一樣,把一個函數(shù)封閉起來,外部怎樣才能去引用呢?必然需要對完暴露出來一個“門”,也就是暴露出來一個接口。。

exports 和 module.exports 二者的關(guān)系:?

1.module.exports才是真正的接口,exports只不過是它的一個輔助工具, 最終返回給調(diào)用的是module.exports而不是exports。module.exports 初始值為一個空對象 {},而exports為指向module.exports 的引用

2. 在require() 的時候,返回的是 module.exports 而不是 exports,因此,直接賦值exports常常會出現(xiàn)錯誤,而賦值為module.exports常常是解決這一問題的折中辦法

3.所有的exports收集到的屬性和方法,都賦值給了Module.exports。當(dāng)然,這有個前提,就是module.exports本身不具備任何屬性和方法。

如果,module.exports已經(jīng)具備一些屬性和方法,那么exports收集來的信息將被忽略。

ES6模塊規(guī)范

不同于CommonJS,ES6使用 export 和 import 來導(dǎo)出、導(dǎo)入模塊。

export跟export default 有什么區(qū)別呢?

1、export與export default均可用于導(dǎo)出常量、函數(shù)、文件、模塊等

2、你可以在其它文件或模塊中通過import+(常量 | 函數(shù) | 文件 | 模塊)名的方式,將其導(dǎo)入,以便能夠?qū)ζ溥M行使用

3、在一個文件或模塊中,export可以有多個,export default僅有一個

4、通過export方式導(dǎo)出,在導(dǎo)入時要加{ },export default則不需要

export default function(){

? console.log('foo');

}

var firstName = 'Michael';var lastName = 'Jackson';var year = 1958;export {firstName, lastName, year};

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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