【Node.js】学习之模块化

模块化开发旨在将程序划分为独立的结构,防止全局变量污染。Node.js中,每个.js文件是一个模块,具有模块作用域,可通过module.exports和exports导出成员,使用require按特定规则导入模块。CommonJS规范在Node.js中得到支持,提供exports、module.exports和require进行模块间交互。
摘要由CSDN通过智能技术生成

模块化

1.什么是模块化、模块化开发

  • 事实上模块化开发最终的目的是将程序划分成一个个小的结构;

  • 这个结构中编写属于自己的逻辑代码,有自己的作用域,定义变量名词时不会影响到其他的结构;

  • 这个结构可以将自己希望暴露的变量、函数、对象等导出给其结构使用;

  • 也可以通过某种方式,导入另外结构中的变量、函数、对象等;

2.Node.js中的模块作用域

模块作用域:

和函数作用域类似,在自定义模块中定义的变量、方法等成员,只能在当前模块内被访问,这种模块级别的访问权限,叫做模块作用域。

模块作用域的好处:

防止了全局变量污染的问题

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

module对象

在每个.js自定义模块中都有一个module对象,它里面存储了和当前模块相关的信息,

console.log(module) 打印如下:

module.exports对象

在自定义模块中,可以使用module.exports对象,将模块内的成员共享出去,供外界使用

注:使用require()方法导入模块时,导入的结果永远以module.exports指向的对象为准

exports对象

为了简化向外共享成员的代码,Node提供了exports对象,==默认情况下,exports和module.exports指向同一个对象==。最终共享结果,还是以module.exports指向的对象为准。

4.require细节

==require是一个函数==,可以帮助我们引入一个文件(模块)中导出的对象。

  • require的查找规则

  • 导入格式:require(x)

  • X是一个Node核心模块,比如path、http

  • 直接返回核心模块,并且停止查找

  • X是以 ./ 或 ../ 或 /(根目录)开头的

  • 第一步:将X当做一个文件在对应的目录下查找;

  • 1.如果有后缀名,按照后缀名的格式查找对应的文件

  • 2.如果没有后缀名,会按照如下顺序:

  • 1> 直接查找文件X

  • 2> 查找X.js文件

  • 3> 查找X.json文件

  • 4> 查找X.node文件

  • 第二步:没有找到对应的文件,将X作为一个目录

  • 查找目录下面的index文件

  • 1> 查找X/index.js文件

  • 2> 查找X/index.json文件

  • 3> 查找X/index.node文件

  • 如果没有找到,那么报错:not foun

5.模块化规范

Node.js遵循了CommonJS模块化规范。CommonJS规定了==模块的特性==和==各模块之间如何相互转换==。

CommonJS规定:

  1. 每个模块内部,module变量代表当前模块

  1. module变量是一个对象,它的exports属性是对外的接口。

  1. 加载某个模块,其实是加载该模块的module.exports属性,==require()方法用于加载模块==。

  • 所以,Node中对CommonJS进行了支持和实现,让我们在开发node的过程中可以方便的进行模块化开发:

  • 在Node中每一个js文件都是一个单独的模块;

  • 这个模块中包括CommonJS规范的核心变量:exports、module.exports、require;

  • 我们可以使用这些变量来方便的进行模块化开发;

  • 模块化的核心是导出和导入,Node中对其进行了实现:

  • exports和module.exports可以负责对模块中的内容进行导出;

  • require函数可以帮助我们导入其他模块(自定义模块、系统模块、第三方库模块)中的内容;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端程序员小张

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值