1. 程式人生 > >exports、module.exports和export、export default區別

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變數賦值,因為這樣會等於切斷了exportsmodule.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'