在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