2021/10/24 exports,module.exports,export,export default区别

模块规范

node和浏览器端支持的模块规范不同
2021/10/24 exports,module.exports,export,export default区别_第1张图片

node模块

–1.node模块遵循CommonJs规范

–2.根据这个规范,每个文件就是一个模块,有自己的作用域。在一个文件里面定义的变量、函数、类,都是私有的,对其他文件不可见

–3.CommonJS定义的模块分为: 模块标识(module)、模块定义(exports) 、模块引用(require)

  • module变量代表当前模块,这个变量是一个对象
  • exports属性(即module.exports)是对外的接口,加载某个模块,加载的就是该模块的module.exports属性

exports 和 module.exports

  • 在一个node执行一个文件时,会给这个文件生成一个exports和module对象
  • 为了使用方便,node给每一个模块(module)提供了exports属性,指向module.exports.
  • 相当于在每个模块头部,有这行命令
var exports = module.exports;

我们可以直接在 exports 对象上添加方法,表示对外输出的接口,如同在module.exports上添加一样,都指向一块内存区域。
2021/10/24 exports,module.exports,export,export default区别_第2张图片

  • 代码demo1
//导出 example.js
var x=5;
var addX = function(val){
	return val + 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(3));//8

  • 代码demo2
    node模块是通过module.exports导出的,如果直接将exports变量指向一个函数,切断了exports和module.exports的联系,可能会报错
// a.js
exports = function a() {};

// b.js
const a = require('./a.js') // a 是一个空对象

2021/10/24 exports,module.exports,export,export default区别_第3张图片

–总结:

  • require导出内容指向的是module.exports的内存区域,不是exports的。exports只辅助module.exports操作内存中的数据
  • 避免糊涂,最好使用module.exports导出数据

ES模块

– ES6使用export和import来导出,导入模块

– export default为模块指定默认导出

export和export default的区别

  • export与export default均可用于导出常量、函数、文件、模块等
  • 在一个文件或模块中,export、import可以有多个,export default仅有一个
  • 通过export方式导出,在导入时要加{ },export default则不需要
  • export能直接导出变量表达式,export default不行

参考链接

1.https://segmentfault.com/a/1190000010426778(大部分出自这里,有详细的demo看效果,还有代码地址)
2.https://www.cnblogs.com/fayin/p/6831071.html(通俗易懂,,带demo)
3.https://blog.csdn.net/weixin_40817115/article/details/81534819(有模块规范区别)
4.https://blog.csdn.net/weixin_40817115/article/details/81534819

你可能感兴趣的:(模块化,1024程序员节)