模块规范
node和浏览器端支持的模块规范不同
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上添加一样,都指向一块内存区域。
- 代码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 是一个空对象
–总结:
- 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