node中 模塊導入和導出的探究

咱們在編寫js過程當中,常常會碰到 requrie和import的寫法,也會看到export default,exports的寫法,他們能不能混用呢,咱們來探究一下node

當前環境:

node版本 v9.6.1
操做系統 Mac

module

咱們打印出module,結果以下
圖片描述
圖片描述數組

module.id 模塊的識別符,一般是帶有絕對路徑的模塊文件名。
module.filename 模塊的文件名,帶有絕對路徑。
module.loaded 返回一個布爾值,表示模塊是否已經完成加載。
module.parent 返回一個對象,表示調用該模塊的模塊。
module.children 返回一個數組,表示該模塊要用到的其餘模塊。
module.exports 表示模塊對外輸出的值。

exports與module.exports

圖片描述
圖片描述
咱們能夠看到在模塊中exports和module.exports 是同一個對象
就至關於,文件執行前默認執行了一下語句ui

let exports = module.exports;

export

var firstName = 'Michael';
var lastName = 'Jackson';
var year = 1958;

export {firstName, lastName, year};

執行結果
圖片描述spa

咱們看到在node v9.6.1 版本中並不支持export,咱們使用bable轉譯後看一下操作系統

clipboard.png
其實使用export,編譯後仍是使用的exportscode

export default

var firstName = 'Michael';
var lastName = 'Jackson';

export default firstName;
export {lastName };

clipboard.png

關於node中模塊導出結論

因此node中導出模塊只會用到了module.exports,其餘語法都只是一些包裝而已對象

require

當modle.js爲exports的形式時

module.js圖片

var firstName = 'Michael';
var lastName = 'Jackson';

exports.default = firstName;
exports.lastName = lastName;

index.jsip

const test4 = require('./modle');
console.log(test4);

結果it

{ default: 'Michael', lastName: 'Jackson' }

當modle.js爲export的形式時

module.js

var firstName = 'Michael';
var lastName = 'Jackson';

export default firstName;
export lastName = lastName;

index.js

const test4 = require('./modle');
console.log(test4);

結果:

{ default: 'Michael', lastName: 'Jackson' }

結論

require接受到的是module.exports對象
當你使用export default firstName時,轉化成了exports.default = firstName;
因此不管你使用什麼樣的形式導出模塊,對於require來講都是同樣的

import

當modle.js爲export的形式時

var firstName = 'Michael';
var lastName = 'Jackson';

export default firstName;
export { lastName };

index.js

import test6 from './module';
console.log(test6);

結果

Michael

這裏就和require不同了,import默認導出的是 export default

index.js

import * as test6 from './module';
console.log(test6);

結果:

{ default: 'Michael', lastName: 'Jackson' }

這時候導出的結果才和require一致
當import test6 from './module'是,默認會查找default,假如沒有export default那麼 test6爲undefined,那麼要導出lastName就得使用

import { lastName } from './module';

當modle.js爲exports的形式時

var lastName = 'Jackson';
var firstName = 'Michael';

exports = { lastName , firstName };

index.js

import test7 from './module';
console.log(test7);

結果

{ firstName: 'Michael', lastName: 'Jackson' }

結論

導出模塊可使用 export和exports,引入模塊可使用 import和require,但兩兩能夠交叉使用,import/export 最終都是編譯爲 require/exports 來執行的只是export 會有一個default的不一樣,但通常來講export對應import,exports對應require。

相關文章
相關標籤/搜索