===============commonJS==================
在node.js 中,由於有且僅有一個入口文件(啓動文件),而開發一個應用肯定會涉及到多個文件的配合,
因此,node.js 對模塊的需求比瀏覽器端要大的多
模塊的導出:
什麼叫做模塊: 模塊就是一個JS文件,它實現了一部分的功能,並隱藏自己的內部實現,同時提供一些接口供其他模塊使用
模塊有兩個核心元素: 隱藏和暴露
隱藏的,是自己內部的實現
暴露的,是希望外部使用的接口
在任何一個正常的模塊化標準,都應該默認隱藏模塊中的所有實現,而通過一些語法或api調用來暴露接口
模塊的導入:
當需要使用一個模塊時,使用的是該模塊暴露部分(導出的部分),隱藏的部分永遠是無法使用的
commonJS 規範:
commonJS 使用exports導出模塊, require導入模塊
具體規範如下:
1. 如果一個JS文件中存在exports或require, 該JS文件是一個模塊
2. 模塊內所有代碼均爲隱藏代碼,包括全局變量,全局函數,這些全局的內容均不應該對全局變量造成污染
3. 如果一個模塊需要暴露一些API 提供給外部使用,需要通過exports導出,exports是一個空對象,你可以爲該對象添加任何需要導出的內存。
4. 如果一個模塊需要導入其他模塊,通過require實現,require是一個函數,傳入模塊的路徑即可返回該模塊導出的整個內容
注意: nodejs 中導入模塊,使用相對路徑,並且必須以./ 或 ../ 開頭
nodejs 對CommonJS的實現
爲了實現CommonJS規範,nodejs對模塊做了以下處理:
1. 爲了保證高效的執行,僅加載必要的模塊。nodejs只有執行到require函數纔會加載並執行模塊
2. 爲了隱藏模塊中的代碼,nodejs執行模塊時,會將模塊中的所有代碼放置到一個函數中取執行,以保證不污染全局變量
(function(){})();
3. 爲了保證順利的導出模塊的內容,nodejs做了一些處理:
1. 在模塊開始執行前,初始化一個值爲module.exports = _+
2. module.exports 即模塊的導出值
3. 爲了方便開發者便捷的導出,nodejs在初始化完module.exports 後, 又聲明瞭一個變量 exports = module.exports
(function(module){
module.exports = {};
var exports = module.exports;
// 模塊中的代碼
return module.exports;
})()
4. 爲了避免反覆重複加載同一個模塊,nodejs默認開啓了模塊緩存,如果加載的模塊已經被加載過了,則自動使用之前的導出結果
===================es6導入=================================
模塊的引入:
注意: 這一部分非模塊化標準, 目前瀏覽器使用以下方式引入一個ES6模塊文件:
<script scr="入口文件" type="module">
ES6模塊導入導出分爲兩種:
1. 基本的導入導出
2. 默認的導入導出
基本的導出:
類似於 export.xxx
使用方法:
export 聲明表達式
例如: export const a = 1 // 導出a,值爲2, 類似CommonJS中的exports.a = 1
export function test() {} // 導出test,值爲一個函數,類似CommonJS中的 exports.text = function(){}
export {}
例如: const a = 18; export {age} // 將a 的名稱當作導出的名稱,將a的值當作導出的值
由於基本導出必須具有名稱,所以要求導出的內容必須跟上聲明表達式或具名符號
基本導入:
由於使用的是依賴預加載,因此,導入的任何其他模塊,導入代碼必須放置到所有代碼之前
對於基本導出,如果要進行導入,使用下面的代碼:
import {導入的符號列表} from "模塊路徑"
例如: import {name, age} from "a.js"
注意:
1. 導入的時候,可以通過關鍵字as 來進行重命名
2. 導入時使用的符號是常量,不可以修改
3. 可以使用*號導入所有的基本導出,形成一個對象
默認的導入導出
默認導出:每個模塊,除了允許有多個基本導出之外,還允許有一個默認導出,默認導出類似於CommonJS中的module。exports,由於只有一個,因此無需具名
具體的語法是:
export default 默認導出的數據
例如: export default 123
或者export {默認導出的數據 as default}
由於每個模塊僅允許只有一個默認導出,因此,每個模塊只能有一個默認導出
默認導入:
需要想要導入一個模塊的默認導出,使用下列語法:
import 接受變量名 from "路徑"
注意: 如果使用*號,會將所有的默認導出聚和到一個對象裏面
es6 模塊化學習總結
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.