ES6的模塊化規範和CommonJS的模塊化規範的差別

ES6 在語言標準的層面上,實現了模塊功能,並且實現得至關簡單,旨在成爲瀏覽器和服務器通用的模塊解決方案。其模塊功能主要由兩個命令構成:export 和 import。export命令用於規定模塊的對外接口,import命令用於輸入其餘模塊提供的功能。node

/** 定義模塊 math.js **/

var n = 1;

function add(){
    
return 2+3

}

export {
    n,
    add
}


/** 引用模塊  main.js**/

import { n , add } from './math.js'

如上例所示,使用import命令的時候,用戶須要知道所要加載的變量名或函數名。其實ES6還提供了export default命令,爲模塊指定默認輸出,對應的import語句不須要使用大括號。這也更趨近於ADM的引用寫法。瀏覽器

/** export default 定義輸出  math.js**/
    //輸出
    export default { basicNum, add };
    
/** 引用模塊   main.js**/
   
     //引入
    import math from ‘./math‘;
    
    alert(math.n);

    math.add();
}

CommonJS

Node.js是commonJS規範的主要實踐者,它有四個重要的環境變量爲模塊化的實現提供支持:module、exports、require、global。實際使用時,用module.exports定義當前模塊對外輸出的接口(不推薦直接用exports),用require加載模塊。
//定義模塊 math.js       
    var n = 0;
    function add(a, b) {
        return a + b;
    }
    module.exports = { //在這裏寫上須要向外暴露的函數、變量
        add: add,
        n: n
    }

    /** 引入模塊 require **/

    //引用自定義的模塊時,參數包含路徑,可省略.js
    var math = require(‘./math‘);
    math.add(2, 5);


    //引用核心模塊時,不須要帶路徑
    var http = require(‘http‘);
    http.createService(...).listen(3000);

import 時候的路徑問題(新手容易碰到)

  • 開始玩的時候,老是出現 cannot find module 問題,原來 在 import 的時候 若是不使用相對路徑或者絕對路徑,node默認會去node_modules/文件夾下去找,例如:
import * as obj from 'nav'

// node 會試着去尋找 node_modules/nav.js 文件,若是沒有找到會接着找 nav 文件夾,若是文件夾存在,會找文件夾內的index.js文件,找不到就會報錯

// 正確寫法
import * as obj from './exports'
相關文章
相關標籤/搜索