导出模块的两种方式
参考
https://nodejs.org/api/modules.html#modules_exports_shortcut
- exports
- module.exports
// 定义方法,常量
const myPI = 3.14
const add = (a,b) => a + b;
// 导出,两种方法任意都可以
// 方法一:
exports.myPI = myPI
exports.add = add
// 方法二:
module.exports.myPI = myPI
module.exports.add = add
// 方法二(变形)
module.exports = {
myPI,
add
}
在阅读其它人的代码时,可能会遇到这两种不同的写法。所以我们还是有必要了解一下的。
cookie模块,body-parser模块,arry-flatten模块中的导出均采用不同的方式。
两个对象的关系
-
初始
exports
和
module.exports
是指向
同一块内存区域
,其内容都是一个空对象。(exports是module.exports的别名)即:
exports === module.exports // 输出是 true
所以下面两种写法的效果是一样的:
//1 mymodule.js
exports.f = function(){ }
exports.pi = 3.1415926
//2 mymodule.js
module.exports.f = function(){ }
module.exports.pi = 3.1415926
-
在定义模块时:
如果直接给
exports
对象赋值(例如:exports={a:1,b:2}),此时,
exports
就不会再指向
module.exports
,而转而
指向这个新对象
,此时,
exports
与
module.exports
不是同一个对象。
在引入某模块时:以该模块代码中
module.exports
指向的内容为准。
图示
结论
在导出模块过程中,建议只用一种方式(建议直接使用module.exports)
版权声明:本文为qq_43157612原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。