exports、module.exports和export、export default區別
在 Node 環境中,一個.js
檔案就稱之為一個模組(module),每個檔案就是一個模組,有自己的作用域,在一個檔案裡面定義的變數、函式、類,都是私有的,對其他檔案不可見,而 Node 應用由模組組成,採用 CommonJS 模組規範。
CommonJS 定義的模組分為: 模組標識(module)、模組定義(exports) 、模組引用(require)
module.exports
屬性與exports
變數
module.exports
屬性表示當前模組對外輸出的介面,其他檔案載入該模組,實際上就是讀取module.exports
而為了方便,Node為每個模組提供一個exports
變數,指向module.exports
,正因為如此不能直接對exports
變數賦值,因為這樣會等於切斷了exports
與module.exports
的聯絡。
首先上是用法上的不同
module.exports和exports的用法是後面加一個等號,再接具體的匯出
module.exports=...
exports=...
export和export default的用法是後面直接接具體的匯出,沒有等號
export ...
export default ...
2、exports其實是module.exports的引用
在nodejs中,每一個js檔案都被看成是一個模組,所以,nodejs會為每一個js檔案生成一個module物件,這個module物件會有一個exports屬性,並且這個exports屬性是一個空物件,即
module={
exports:{}
}
- 1
- 2
- 3
同時還有一個exports物件,引用的是module的exports屬性,
exports=module.exports
- 1
3、export和exports的區別
這兩個看起來很容易混淆,因為實在太像了。但是二者是完全不同的概念。
export是es6引入的語法,用於匯出模組中的變數,物件,函式,類。對應的匯入關鍵字是import。
exports是一個物件,不是語法。具體的含義在第二點已經說明。
4、export和export default的區別
export和export default都是es6的匯出語法。
二者的區別有以下幾點:
- export default在一個模組中只能有一個,當然也可以沒有。export在一個模組中可以有多個。
- export default的物件、變數、函式、類,可以沒有名字。export的必須有名字。
- export default對應的import和export有所區別
比如
// test.js
export default const a = 1;
export const a = 1;
對應的import分別是
import a from 'test'
import {a} from 'test'
export對應的import必須加上{}
- import時取別名的區別
二者都可以在import的時候取別名。但格式不同。
比如把匯入的a取名為b
// export default對應的取別名方式
import b from 'test'
// export對應的取別名方式
import {a as b} from 'test'