node.js 导出模块的两种方式 exports module.exports

导出模块的两种方式

参考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模块中的导出均采用不同的方式。

两个对象的关系

  • 初始exportsmodule.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,而转而指向这个新对象,此时,exportsmodule.exports不是同一个对象。

在引入某模块时:以该模块代码中module.exports指向的内容为准。

图示
node.js 导出模块的两种方式 exports module.exports_第1张图片
node.js 导出模块的两种方式 exports module.exports_第2张图片
node.js 导出模块的两种方式 exports module.exports_第3张图片
node.js 导出模块的两种方式 exports module.exports_第4张图片

结论

在导出模块过程中,建议只用一种方式(建议直接使用module.exports)

你可能感兴趣的:(node.js,前端,node.js)