常用的導(dǎo)出方式有四種module.exports
,exports
,export
,export default
和兩種導(dǎo)入方式require
和import
吹由。
首先來看一下module exports
和exports
,這兩種導(dǎo)出方式的區(qū)別如下:
-
module.exports
每一個Nodejs文件都會自動創(chuàng)建一個module對象确垫,這個對象有一個exports屬性通铲,初始值是一個空對象厦滤。
module.exports = {}
-
exports
exports
是引用module.exports
的值箱舞。module.exports
被改變的時候,exports
不會被改變裤翩,而模塊導(dǎo)出的時候资盅,真正導(dǎo)出的執(zhí)行是module.exports
,而不是exports
再來看一下export defalut
和 export
的區(qū)別:
-
export defalut
和export
都可以用來導(dǎo)出函數(shù)踊赠,文件呵扛,模塊,常量等 - 在一個文件中筐带,
export
可以有多個今穿,但是export default
只有一個。 - 通過
export
方式導(dǎo)出伦籍,在導(dǎo)入時要加{ }蓝晒,export default
則不需要
最后,我們再來看一下require
和import
的區(qū)別
-
require
是在CommonJS中出現(xiàn)的帖鸦,import
是在ES6中出現(xiàn)的芝薇,是ES6的一個
語法。 -
require
的調(diào)用時間為運(yùn)行時調(diào)用富蓄,所以require
可以出現(xiàn)在文件的任何地方剩燥,而import
是編譯時調(diào)用,所以必須放在文件頭部立倍。 -
require
是賦值過程灭红,其實(shí)require
的結(jié)果就是對象、數(shù)字口注、字符串变擒、函數(shù)等,再把require
的結(jié)果賦值給某個變量
import
是解構(gòu)過程寝志,但是目前所有的引擎都還沒有實(shí)現(xiàn)import
娇斑,我們在node
中使用babel
支持ES6,也僅僅是將ES6轉(zhuǎn)碼為ES5再執(zhí)行材部,import
語法會被轉(zhuǎn)碼為require
記住
export default
導(dǎo)出的東西只能用import
導(dǎo)入毫缆。而module.exports
和exports
的東西可以以任何一種方式導(dǎo)入。