常用的導(dǎo)出方式有四種module.exports
,exports
,export
,export default
和兩種導(dǎo)入方式require
和import
。
首先來(lái)看一下module exports
和exports
,這兩種導(dǎo)出方式的區(qū)別如下:
-
module.exports
每一個(gè)Nodejs文件都會(huì)自動(dòng)創(chuàng)建一個(gè)module對(duì)象,這個(gè)對(duì)象有一個(gè)exports屬性,初始值是一個(gè)空對(duì)象。
module.exports = {}
-
exports
exports
是引用module.exports
的值。module.exports
被改變的時(shí)候,exports
不會(huì)被改變,而模塊導(dǎo)出的時(shí)候,真正導(dǎo)出的執(zhí)行是module.exports
,而不是exports
再來(lái)看一下export defalut
和 export
的區(qū)別:
-
export defalut
和export
都可以用來(lái)導(dǎo)出函數(shù),文件,模塊,常量等 - 在一個(gè)文件中,
export
可以有多個(gè),但是export default
只有一個(gè)。 - 通過(guò)
export
方式導(dǎo)出,在導(dǎo)入時(shí)要加{ },export default
則不需要
最后,我們?cè)賮?lái)看一下require
和import
的區(qū)別
-
require
是在CommonJS中出現(xiàn)的,import
是在ES6中出現(xiàn)的,是ES6的一個(gè)
語(yǔ)法。 -
require
的調(diào)用時(shí)間為運(yùn)行時(shí)調(diào)用,所以require
可以出現(xiàn)在文件的任何地方,而import
是編譯時(shí)調(diào)用,所以必須放在文件頭部。 -
require
是賦值過(guò)程,其實(shí)require
的結(jié)果就是對(duì)象、數(shù)字、字符串、函數(shù)等,再把require
的結(jié)果賦值給某個(gè)變量
import
是解構(gòu)過(guò)程,但是目前所有的引擎都還沒(méi)有實(shí)現(xiàn)import
,我們?cè)?code>node中使用babel
支持ES6,也僅僅是將ES6轉(zhuǎn)碼為ES5再執(zhí)行,import
語(yǔ)法會(huì)被轉(zhuǎn)碼為require
記住
export default
導(dǎo)出的東西只能用import
導(dǎo)入。而module.exports
和exports
的東西可以以任何一種方式導(dǎo)入。