当前位置: 首页 > article >正文

node.js之---CommonJS 模块

CommonJS概念

在 Node.js 中,CommonJS 是一种模块化规范,它定义了如何在 JavaScript 中创建和使用模块。CommonJS 是 Node.js 使用的默认模块系统。它让开发者能够分离代码,便于重用和维护。

CommonJS 模块的基本特性

模块导出

在 CommonJS 模块系统中,module.exportsexports 都是用于导出模块内容的对象,但它们有一些关键的区别。在大多数情况下,二者行为相似,但它们的使用方式和语义有所不同。理解这两者的区别非常重要,尤其是在导出多个功能或自定义导出时。

1、module.exports 和 exports 的关系

  • exports 是 module.exports 的一个引用,最初它们指向同一个对象。
  • module.exports 是模块的最终导出对象,最终通过 require() 引用模块时返回的内容就是 module.exports 的值。
  • exports 是 module.exports 的一个快捷引用,可以用来简化导出语法。

2、关键区别

  1. 初始化时的关系

    • 在每个模块加载时,Node.js 会自动创建一个 module.exports 对象,并且 exports 是 module.exports 的引用(即 exports === module.exports)。
    • 你可以通过 exports 添加属性和方法,这样 module.exports 对象也会自动更新。
  2. 直接赋值的区别

    • 如果你直接修改 module.exports(例如,给 module.exports 赋一个新的对象),exports 将不再与 module.exports 保持引用关系。此时,exports 和 module.exports 不再指向同一个对象。
    • 但是,如果你修改 exports 里的属性(例如,exports.add = ...),那么这会影响 module.exports

模块导入

使用 require() 函数导入模块。

// app.js
const math = require('./math');

console.log(math.add(1, 2));       // 输出: 3
console.log(math.subtract(5, 3));  // 输出: 2

CommonJS 模块的关键点

  1. 同步加载
    CommonJS 模块是同步加载的。这意味着,当 require() 被调用时,Node.js 会同步地加载并执行模块代码,然后返回模块的导出内容。

  2. 每个模块只加载一次
    在 Node.js 中,一个模块会被加载并执行一次。之后,对于同一个模块的任何后续 require() 调用,都会返回相同的模块缓存(module.exports)。这可以提高性能,因为同一模块的代码不会被执行多次。

  3. 模块作用域
    每个模块都有自己的作用域。模块内的变量和函数不会泄露到全局作用域,只能通过 module.exports 导出访问。这样可以避免命名冲突。


http://www.kler.cn/a/465477.html

相关文章:

  • Monolith - 大规模推荐建模的深度学习框架
  • C#Halcon交互绘制ROI
  • 啥是大模型
  • 【Golang 面试题】每日 3 题(十七)
  • Objective-C语言的软件开发工具
  • 热备份路由HSRP及配置案例
  • 大数据学习(33)-续集
  • 如何配置【Docker镜像】加速器+【Docker镜像】的使用
  • 【踩坑记录】uni-app 微信小程序调试不更新问题解决指南
  • GitHub的简单操作
  • 《 C++ 点滴漫谈: 十七 》编译器优化与 C++ volatile:看似简单却不容小觑
  • idea 的 springboot项目spring-boot-devtools 自动编译 配置热部署
  • 考试座位号(PTA)C语言
  • 【Rust 学习笔记】Rust 基础数据类型介绍——指针、元组和布尔类型
  • 3d扫描仪三维扫描构建牙齿模型
  • certificate verify failed: unable to get local issuer certificate (_ssl.c:10
  • python生成、操作svg图片
  • Couchbase 的索引
  • HTTP Scheme 通常指的是在 URL 中用于指定使用 HTTP 协议的方案(scheme)
  • 【C】​动态内存管理