nodejs学习记录--模块化

本文深入探讨了Node.js的模块化特性,包括模块分类(内置、自定义、第三方)、加载机制、作用域以及如何共享模块成员。通过require()方法加载模块,module.exports与exports的区别,以及模块缓存机制等关键知识点。了解这些,能提升代码复用性和可维护性,实现按需加载。
摘要由CSDN通过智能技术生成

模块化

1. 概念

在这里插入图片描述

  1. 提高了代码的复用性
  2. 提高了代码的可维护性
  3. 可以实现按需加载

2. node.js中的模块化

2.1 nodejs中的模块分类

  1. 内置模块(由node.js官方提供的,如fs、path、http)
  2. 自定义模块(用户自己写的js文件)
  3. 第三方模块(由第三方开发的使用前需下载的模块)

2.2 加载模块

使用require()方法加载需要的模块:
在这里插入图片描述

2.3 模块作用域

在模块内部定义的变量方法等成员只能在当前模块内使用,而不能被外界访问。
在这里插入图片描述

2.4 共享模块作用域中的成员

  1. module对象
    在这里插入图片描述
    可以看到存在exports对象,该对象向外共享。
  2. module.exports对象
    该对象向外共享,所以说当require(某js文件)时导入的是该js文件中的module.exports指向的对象。
    module.exports == exports 最终向外共享的结果以module.exports为准。
    在这里插入图片描述
    与之前的相比,当使用exports暴露时在其他文件中导入时会导入exports暴露出的成员。

2.5 Node.js的模块化规范

在这里插入图片描述

3. 模块的加载机制

  1. 优先从缓存中加载
    模块在第一次加载后会被缓存,也意味着多次调用require()不会导致模块的代码被多次执行。
  2. 内置模块的加载机制
    内置模块是由node官方提供的模块,因此加载优先级是最高的。
  3. 自定义模块的加载机制
    使用require()加载自定义模块时,必须指定以./../开头的路径标识符,否则node会把它当成内置模块或第三方模块加载。
    同时,在使用require()导入自定义模块时如果省略了文件扩展名,则Node.js会按顺序分别尝试加载以下文件:
    ① 按照确切文件名进行加载。
    ② 补全.js扩展名进行加载。
    ③ 补全.json扩展名进行加载。
    ④ 补全.node扩展名进行加载。
    ⑤ 加载失败,报错。
  4. 第三方模块的加载机制
    如果传递给require()的模块标识符不是一个内置模块,也没有以./../开头,则Node.js会从当前模块的父目录开始,尝试从/node_modules文件夹中加载第三方模块。
    如果没有找到对应的第三方模块,则移动到上一层父目录中,直到文件系统的根目录。
  5. 目录作为模板
    当把目录作为模板时有三种加载方式:
    ① 在被加载的目录下查找package.json文件,并寻找main属性作为require()加载的入口
    ② 如果目录里没有package.json文件,或者main入口不存在或无法解析,则Node.js将会试图加载目录下的index.js文件。
    ③如果以上两布都失败则报错。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

别出声~~

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

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

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

打赏作者

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

抵扣说明:

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

余额充值