在JS模塊化編程中,以前使用的是require.js或者sea.js。隨着前端工程化工具webpack的推出,使得前端js能夠使用CommonJS模塊標準或者使用ES6 moduel特性。
在CommonJs模塊標準中咱們載入模塊使用的是require(),輸出模塊用的是exports或者module.exports
在ES6中載入模塊咱們用的是import ,輸出模塊用的是export前端
//載入模塊 var m = require('./moduleA.js') m.callName() //輸出模塊 exports.callName = function(){ console.log('jesse') } //也能夠這樣輸出 module.exports.callName = function(){ console.log('jesse') }
module.exports纔是module模塊的真正接口,而exports能夠理解爲它的一個副本
雖然修改exports對象的時候也會修改module.exports對象,但最終返回給調用的是module.exports對象
當module.exports對象經過賦值方式進行設定後,就已經和exports對象不要緊了node
so,個人理解是exports輸出的只是要輸出的對象的某個屬性,module.exports才真正輸出的是要輸出的對象。
一個模塊文件中能夠有多個exports輸出,但只能有一個module.exports輸出
這種方式廣泛用於node中模塊的編寫webpack
es6moduel特性在node環境中並不能徹底支持,解決方法是用babel編譯es6
//載入模塊 import {callName} from './moduleA.js' callName() //輸出模塊 export function callName (){ console.log('jesse') }
1.export與export default都可用於導出常量、函數、文件、模塊等
2.你能夠在其它文件或模塊中經過import+(常量 | 函數 | 文件 | 模塊)名的方式,將其導入,以便可以對其進行使用
3.在一個文件或模塊中,export、import能夠有多個,export default僅有一個
4.經過export方式導出,在導入時要加{ },export default則不須要web