es6 模塊化學習總結

 ===============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 "路徑"
    注意: 如果使用*號,會將所有的默認導出聚和到一個對象裏面
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章