在es6之前,模塊加載方案最主要的有 CommonJS (用于服務器)和 AMD (用于瀏覽器)兩種
CommonJS規(guī)范
// 導出 math.js
exports.add = function(){
var sum = 0 ,
i = 0 ,
args = arguments ,
1 = args.length;
while(i < 1){
sum += args[i++];
}
return sum;
};
// 導入 math.js
var add = require('math').add;
exports.increment = function(val){
return add(val, 1);
};
es6規(guī)范
一個模塊中只能有一個export default
默認導出:
//函數(shù)
export default function() {}
//類
export default class {}
//導出對象 常用
export default {}
默認導入
import exmple from ‘文件路徑’
注:在導入組件時栖博,若組件為默認導出方式惑淳,則導入名稱可任意定制宾濒,代碼中的 ‘ exmple ’ 可被替換為其他名字
命名導出:
const exmple = function() {}
const exmple2 = function() {}
export {
exmple, //等同于 exmple: exmple, 只寫一個 exmple 為 es6 簡寫
exmple2, //等同于 exmple2: exmple2,
};
命名導入:
import { exmple, exmple2 } from ‘文件路徑’
別名導出
const exmple = function() {}
const exmple2 = function() {}
export {
exmple as e1,
exmple2 as e2
};
別名導入:
import { e1, e2 } from ‘文件路徑’
注:在導入組件時,若組件為命名導出方式,上一行代碼中的 ‘ {exmple, exmple2}’ 請與導出時命名保持一致
關于es6規(guī)范:
在目前所有的js引擎中建蹄,import并沒有被完全實現(xiàn)讼渊,通常所說的支持ES6其實是轉(zhuǎn)碼為ES5再執(zhí)行动看,import語法會被轉(zhuǎn)碼為require。
這也是為什么爪幻,導出時使用module.exports菱皆,在引入此模塊時使用import仍然起效,因為本質(zhì)上挨稿,import會被轉(zhuǎn)碼為require去執(zhí)行仇轻。
擴展:
require和import最大的區(qū)別在于,import是在代碼編譯階段執(zhí)行的叶组,在引入模塊之前調(diào)用不會出現(xiàn)報錯拯田,但是require則是運行時解析的,不允許引入前調(diào)用