module.exports 和 export default
CommonJS模塊規范和ES6模塊規范完全是兩種不同的概念
CommonJS模塊規范
Node應用由模塊組成,采用CommonJS模塊規范。
根據這個規范,每個文件就是一個模塊,有自己的作用域。在一個文件里面定義的變量、函數、類,都是私有的,對其他文件不可見。
CommonJS規范規定,每個模塊內部,module變量代表當前模塊。這個變量是一個對象,它的exports屬性(即module.exports)是對外的接口。加載某個模塊,其實是加載該模塊的module.exports屬性。
var x = 5; var addX = function (value) {return value + x; }; module.exports.x = x; module.exports.addX = addX;
上面代碼通過module.exports輸出變量x和函數addX。
require方法用于加載模塊。
var example = require('./example.js');console.log(example.x); // 5 console.log(example.addX(1)); // 6
exports 與 module.exports
為了方便,Node為每個模塊提供一個exports變量,指向module.exports。這等同在每個模塊頭部,有一行這樣的命令。
var exports = module.exports; 于是我們可以直接在 exports 對象上添加方法,表示對外輸出的接口,如同在module.exports上添加一樣。注意,不能直接將exports變量指向一個值,因為這樣等于切斷了exports與module.exports的聯系。
?
ES6模塊規范
不同于CommonJS,ES6使用 export 和 import 來導出、導入模塊。
// profile.js var firstName = 'Michael'; var lastName = 'Jackson'; var year = 1958;export {firstName, lastName, year};
需要特別注意的是,export命令規定的是對外的接口,必須與模塊內部的變量建立一一對應關系。
// 寫法一 export var m = 1;// 寫法二 var m = 1; export {m};// 寫法三 var n = 1; export {n as m};
export default 命令
使用export default命令,為模塊指定默認輸出。
// export-default.js export default function () {console.log('foo'); }
今天現在項目中遇到的一個問題,報錯信息是
Uncaught Error: Minified React error #130;
檢查之后發現使用的是module.exports,而項目使用的是ES6的語法,所以在第一次的時候總會報錯,刷新一下就可以了,第一次的時候語法轉換失敗了。后面換成了export default 就不會出現這個問題了。
相關鏈接:
CommonJS規范,http://javascript.ruanyifeng.com/nodejs/module.html
ES6 Module 的語法,http://es6.ruanyifeng.com/#docs/module
轉載于:https://www.cnblogs.com/gwf93/p/10278771.html
總結
以上是生活随笔為你收集整理的module.exports 和 export default的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 交换记忆有一段比黄黄还要激情是吗?
- 下一篇: 纹眉毛多少钱啊?