首先要知道前者和後者是兩個不同的規範下的模塊導出方式,我們來分別看一下:
CommonJS模塊規範
CommonJS規範規定,每個模塊內部,module
變量代表當前模塊對象。module
的exports
屬性就是對外提供的接口,加載該模塊時其實就是加載該模塊的module.exports
屬性。
let a = 10;
let fn = ()+>{
return 1 + 2;
}
module.exports.a = a;
module.exports.fn = fn;
而exports
則是Node爲了方便提供的一個簡單寫法,默認把exports
指向了module.exports
。就相當於在每個模塊的頭部隱式添加了
let exports = module.exports;
所以,不論用哪種寫法最後其實都是利用module.exports
導出。
一定不能對exports進行賦值操作,這樣就切斷了二者的關聯。
exports.a = a;
當然,在CommonJS中引入模塊使用的是require
關鍵字。
ES6模塊規範
每一個文件之中都只能有一個export default
,但是可以有多個export
。顧名思義,export default
就是爲模塊指定默認的輸出。
export default let a = 1;
在引用模塊的時候,使用import...from...
可以給模塊隨便起名字
import aa from '';
但是如果是export
導出的變量,在引用時必須和導出時保持一致,如下:
let str = 'hello';
export {str};
export let num = 100;
import {str, num} from ''