在Node.js與Typescript中導入導出模塊的區別

Node.js和Typescript都有自己模塊化的方式,它們有一點相似也有一些區別。

Node.js中的export與require

(這部分主要參考廖雪峰的JS教程

對外輸出變量:

module.exports = variable;

或:

exports.hello = hello;

exports.greet = greet;

引入其他模塊輸出的變量:

var foo = require('other_module');

Node.js模塊原理:

Node.js會用函數閉包將每個文件的內容封裝起來,以防止全局變量受到污染:

var module = {id: 'moduleName', exports: {} };

function(exports, module) {

? ? // 文件內容

? ? exports.foo = 111;

? ? exports.bar = 222;

? ? // 文件內容結束

} (module.exports, module);

其他模塊引用這個模塊的時候,只需要找到這個模塊的module對象并返回module.exports就行了。

注意,我們在對外輸出變量的時候不能直接對exports賦值,因為exports只是module.exports的一個引用而已,如果直接對exports賦值,只是改變了這個引用的指向,而并沒有改變module.exports的內容。

Typescript中的import與export

在Typescript中我們有更加方便的導入導出方法:

export { name1, name2, …, nameN }; // 同時導出本模塊中的name1,name2等

export { variable1 as name1, variable2 as name2, …, nameN }; // 同時導出本模塊中的name1,name2等,但是以別的變量名來發布

export let name1, name2, …, nameN;// 同時導出本模塊中的name1,name2等

export let name1 = …, name2 = …, …, nameN;// 同上

export default expression;? // 默認導出 (每個腳本只能有一個)

export default function (…) { … } // 可以默認導出函數,class等

export default function name1(…) { … } // 指定默認導出的變量名

export { name1 as default, … };

export * from …; ?// 導入再導出

export { name1, name2, …, nameN } from …;

export { import1 as name1, import2 as name2,…, nameN } from …;


import defaultMember from "module-name";? //? 導入默認變量defaultMember,不需要{}

import * as name from "module-name"; ?// 導入所有變量,name是所有導出變量組成的對象

import { member } from "module-name";? //? 導入非默認變量member,需要{}

import { member as alias } from "module-name";? // ?以別名導入

import { member1 , member2 } from "module-name"; // ?導入多個變量

import { member1 , member2 as alias2 , [...] } from "module-name";

import defaultMember, { member [ , [...] ] } from "module-name"; ?// 既導入默認變量,也導入非默認變量

import defaultMember, * as name from "module-name";? //既導入默認變量,也導入所有變量的整體。此時name.defaultMember 與 defaultMember完全等價

import "module-name"; ?// 導入所有變量,但是不用一個對象來封裝,可以直接使用導出變量名

更詳細的內容請參考這個鏈接

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容