美文网首页
node.js中module.exports和exports的区

node.js中module.exports和exports的区

作者: 男人宫 | 来源:发表于2022-12-13 16:47 被阅读0次

在node.js中,默认一个js文件就是一个模块,是一个封闭的空间,外部想用js模块里面的值,那么就需要把值导出去

  • node.js默认采用commonjs的模块化管理方式.引入一个模块化需要require("相对路径")的方式.而且每个导出模块node.js默认会返回return module.exports
//所有的CommonJS的模块都会包装到一个函数中
(function(exports,require,module,__filename,__dirname){
/**
参数
exports:向外暴露使用,
 require引入使用,
moudle模块内容,
__filename当前模块的绝对路径
__dirname当前模块所在目录的路径
*/
//可以打印查看各个参数

//默认操作.两个指向的内存地址相同
  module.exports = exports

//程序员自己写的内用
   a = 1
   b = 2
 
//如果给exports赋值exports={a:10},那module.exports的内存指向就和exports的指向不一样了
//如果想让有效exports赋值的内容能导出,则可以module.exports = exports
//属性赋值不影响内存地址

  return module.exports
})

通过在模块中输出module可知

Module {
  id: '.',
  path: '',
  exports: {},
  filename: '',
  loaded: false,
  children: [],
  paths: []
}

通过输出的代码可知 module.exports === exports的.也可以理解为他们指向同一块内存区域{}

注意对象赋值和对象的属性赋值,以及module.exports的指向,因为module.exports的指向是真正返回的内容
//module.exports指向谁就返回谁
module.exports = {a:10} //在导入该模块的地方返回{a:10}

module.exports.a = "你好"  //对象的属性赋值,不会影响结果

exports.b = "世界"  //对象的属性赋值,不会影响结果,和上面其实一样,只要exports不改变地址指向,就不会出问题

//注意
exports = {c:20} //在其他模块导入会为{}
//其实很好理解,exports一旦重新赋值,那么exports就指向了新的内存空间.而真正返回数据module.exports指向的那块内存空间依然是初始值{}
//如此时向要能正确使用该值,只需
module.exports = exports //把module.exports 的指向变成exports的指向即可

相关文章

网友评论

      本文标题:node.js中module.exports和exports的区

      本文链接:https://www.haomeiwen.com/subject/tzihqdtx.html