module.exports exports 和export export default
首先可以知道的是這是兩組不同模組規範。
module.exports 是CommonJS模組規範,通過require 匯入
a.js: var x = 'hello' module.exports.x = x b.js: var a = require('./a.js') console.log(a.x)// hello
而Node採用CommonJS模組規範,為了方便,為每個模組提供一個exports變數,指向module.exports,相當於
exports = module.exports
所以不能直接將exports變數指向一個值,因為這樣等於切斷了exports與module.exports的聯絡。
而export和export default 是屬於ES6語法,通過import 匯入
export有三種寫法
a.js // 寫法一 export var m = 1; // 寫法二 var m = 1; export {m}; // 寫法三 var n = 1; export {n as m}; b.js import {m} from 'a.js'// 注意:這裡的m是用大括號{}括起來的 下面是錯誤寫法 // 報錯 export 2; // 報錯 var m = 2; export m;
注意的是export規定對外的介面,必須與模組內部的變數建立一一對應關係。
export default是為模組指定預設輸出,一個模組只能有一個export default。
a.js function fn() { // 輸出 } export default fn ==>export { fn as default} import anyName from 'a.js';// 注意:這裡可以不用大括號{}把anyName括起來,因為default是唯一的 ===> import {default as anyName} from 'a.js' 下面是錯誤寫法: // 錯誤 export default var a = 1;// 正確: export default a = 1 export 2;// 正確: export default 2