Node.js中的模块化

模块化的相关概念

模块化规范就是对代码进行模块化的拆分与组合时,需要遵守的规则。
例如

  • 使用什么样的语法格式来引用模块
  • 在模块中使用什么语法向外暴露成员

Node.js中根据模块的来源不同,将模块分为3大类分别是:

  • 内置模块(例如node官提供的 fs、http、path模块)
  • 自定义模块(用户自己创建的任意一个js文件都是自定义模块)
  • 第三方模块(由第三方开发出来的模块,并非官方内置模块,也不是用户自定义的文件,使用前需要下载)

在这里插入图片描述
在这里插入图片描述

加载模块

使用require()方法,可以加载内置模块、用户自定义模块、第三方模块。

  • 使用require()方法加载其他模块时,会执行模块中的代码

在这里插入图片描述
例如在07test.js中require()了06m1.js,在06m1.js中写了console.log(‘加载了06这个用户自定义模块’),运行07test时控制台便将这句话打印出来了。并且后面还有一个空对象{ },这个空对象是自定义模块中的module对象,并且每个自定义模块都有一个module对象
在这里插入图片描述

向外共享模块作用域中的成员

module对象

在每个.js自定义模块中都有一个module对象,它里面存储了和当前模块有关的信息,打印如下:
在这里插入图片描述

module.exports对象

在自定义模块中,可以使用module.exports对象,将模块内的成员共享出去,供外界使用,外界用require()方法导入自定义模块时,得到的就是module.exports所指向的对象。如下面的代码所示:
在这里插入图片描述
以下有几种容易出错的情况,在定义的js文件中 利用 module.exports.属性 添加的属性会默认放到module.exports对象内部,如果将一个新对象整体重新赋值给module.exports对象 就相当于给module.exports重新创建了一个新对象 利用module.exports.属性赋给此对象的属性将不复存在。
在这里插入图片描述

exports对象

同时Node还提供了exports对象,默认情况下在一个js文件中,exports 对象和module.exports对象指向的是同一个对象。当最终共享的结果是以module.exports指向的对象为准。
在这里插入图片描述
案例一:
module.exports.username = ‘zs’
exports对象重新整体赋值了一个新对象,最终向外共享的成员只有module.exports.username = 'zs’提供的属性
在这里插入图片描述
案例二:
exports对象 和 module.exports对象 都利用 .属性 的方法赋值,最后向外共享的成员是两者一共的属性。
在这里插入图片描述
案例三:
在这里插入图片描述
案例总结
为了防止混乱,建议大家不要在同一个模块中同时使用exports和module.exports
在这里插入图片描述

node中的模块化规范

node.js遵循了CommonJS模块化规范,CommonJS规定了模块的特性以及模块之间如何相互依赖

CommonJS规定

  1. 每个模块内部,module变量表示当前模块
  2. module变量是一个对象,它的exports属性是对外的接口(即module.exports)
  3. 加载某个模块其实是在加载该模块的module.exports属性,require()方法用于加载模块
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值