Node.js基础---模块化

基本概念

模块化

模块化是指解决一个复杂问题时,自上向下逐层把系统划分成若干模块的过程 ,对于整个系统来说,模块是可组合,分解和更换的单元

遵守固定规则,把大文件拆分成独立并互相依赖的多个小模块

好处:

  1. 提高代码的复用性

  2. 提高代码的可维护性

  3. 实现按需加载

Node.js中的模块化

根据来源不同分为3大类:

  1. 内置模块(由官方提供,例如fs、path、http等)

  2. 自定义模块(用户创建的每个 .js 文件,都是自定义模块)

  3. 第三方模块 (由第三方开发出来的模块,使用前要下载 npm i xxxx)

Node.js中的模块化规范

Node.js 遵循 CommonJS 模块化规范,CommonJS 规定了模块的特性各模块之间如何依赖

CommonJS规定:

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

  2. module 变量是一个对象,它的 exports 属性(即 module.exports是对外的接口

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

加载模块

使用 require() 方法,可以加载内置模块(3大类的都可)

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

可以省略加载文件名的后缀

Node.js中的模块作用域

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

好处:防止全局变量污染的问题

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

1. module对象

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

2. module.exports对象

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

外界用 require() 方法导入自定义模块时,得到的就是 module.exports 所指向的对象

3. 共享成员时的注意点

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

4. exports对象

由于 modules.exports 单词写起来复杂,为了简化代码,Node提供了 exports 对象

默认情况下,exports 和 modules.exports 指向同一个对象

最终结果还是以 modules.exports 指向对象为准

5. exports 和 module.exports 的使用误区

require() 模块时,得到的永远是 module.exports 指向的对象

注意:为了防止混乱,不要在同一个模块中同时使用 exports 和 module.exports

相关推荐
星辰徐哥14 小时前
本地视频预览别只自己看:把Remotion动效项目发给客户远程验收
docker·ai·node.js·html·音视频·react·remotion
ID346107442018 小时前
【课程设计】基于Spring Boot+Vue的校园共享无人机服务系统设计与实现-计算机毕设 附源码44219
javascript·vue.js·spring boot·python·node.js·php·课程设计
敲敲敲敲暴你脑袋1 天前
地图瓦片批量改色来啦!
node.js·gis·数据可视化
太子釢2 天前
AI 开发个人记账 App(服务端篇)
node.js·ai编程
用户64340495148512 天前
Elpis 项目构建工具与前端基建实践总结
node.js
FungLeo2 天前
成为全栈·Node 后端篇·后端测试策略:单元、集成与测试数据库
单元测试·node.js·集成测试·测试策略·成为全栈·测试数据库
FungLeo2 天前
成为全栈·Node 后端篇·评论内容安全:敏感词过滤、三态审核与级联删除
node.js·敏感词过滤·成为全栈·评论内容安全·评论审核·级联删除
FungLeo2 天前
成为全栈·Node 后端篇·阅读量防刷:去重、冷却与计数写分离
node.js·读写分离·数据去重·接口防刷·成为全栈·数据冷却
脉动数据行情13 天前
Node.js WebSocket 实现贵金属实时行情监听 伦敦金 / 伦敦银自动重连方案
websocket·node.js·vim
不老刘3 天前
一行命令解决 Node.js 版本兼容问题:`--openssl-legacy-provider` 深度解析
node.js