module、export、require、import的使用

module

每一個文件就是一個模塊。文件內定義的變量、函數等等都是在本身的做用域內,都是自身所私有的,對其它文件不可見。javascript

每一個文件內部都有一個module對象,它包含如下屬性html

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

module.exports

module中有一個屬性exports,即:module.exports。它是該模塊對外的輸出值,是一個對象。其它模塊在加載該模塊時,實際上加載到的數據都是由它提供的。java

module.exports輸出的能夠是一個對象,也能夠是一個函數。在引用該模塊的文件內,若是接受到的是對象,能夠直接訪問其中的屬性,若是接受到的是一個函數,也能夠直接執行。node

exports

exports是一個特殊的存在,它是對module.exports的指向,能夠經過向exports對象中添加變量、方法等,可是不能直接將exports指向一個值,這樣會切斷exportsmodule.exports之間的聯繫。es6

exportmodule.exports的使用有一點須要注意,若是導出的是一個函數,只能使用module.exports數組

export

export用於規定模塊的對外接口,能夠輸出變量、函數或類。export規定的對外接口必須與模塊內部的變量創建一一對應關係。函數

  • 錯誤寫法
// 方式一
    export 1; // 報錯

    // 方式二
    var a = 1;
    export a; // 報錯

    // 方式三
    function fn() {}
    export fn; // 報錯
  • 正確寫法
// 方式一
    export var a = 1;

    // 方式二
    var a = 1;
    export {a};

    // 方式三
    var a = 1;
    export {a as a1}; // 對a重命名輸出

    // 方式四
    export function fn() {};

    // 方式五
    function fn() {}
    export {fn};

export default

export defaultexport的區別:ui

  • 使用export時,輸出的內容和接收時用的變量名稱必須一致,不然沒法加載;使用export default,則爲模塊指定默認輸出,同時,能夠爲接收到的變量指定其它名稱
  • 使用export輸出的變量或者函數,在import時,須要使用大括號;使用export default則不用

import

importexport配對使用,用於加載接收export輸入的內容code

require

require用於加載模塊文件,默認加載的文件後綴名爲.jshtm

  • 若是加載的文件路徑以/開頭,則表示加載的是一個絕對路徑
  • 若是加載的文件路徑以./../開頭,則表示加載的是一個相對當前位置的路徑
  • 若是加載的文件路徑不以以上內容開頭,則加載的是一個核心模塊,默認會到node_modules下尋找

小結

modulemodule.exportsexports採用的是CommonJS模塊規範。exportexport default採用的是ES6模塊規範。

  • module.exports輸出的是值的拷貝;export是值的引用
  • module.exports在運行時加載;export是在編譯時輸出
// addA.js
    var a = 1;
    function addA() {
        a++;
    }
    module.exports = {
        a: a,
        addA: addA
    };

    // use addA
    var addA = require('./addA.js');
    console.log(addA.a); // 1
    addA.addA();
    console.log(addA.a); // 1

    /************ 改善後 *********************/
    // addA.js
    var a = 1;
    function addA() {
        a++;
    }
    module.exports = {
        get a() {
            return a;
        },
        addA: addA
    };
// addA.js
    export.a = 1;
    export.addA = function() {
        a++;
    }

    // use addA
    import {a, addA} from './addA';
    console.log(a);// 1
    addA();
    console.log(a);// 2

參考

相關文章
相關標籤/搜索