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

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.lryc.cn/news/514163.html

相关文章:

  • 关于AI面试系统2025年趋势评估!
  • SQL—替换字符串—replace函数用法详解
  • 《Vue3实战教程》40:Vue3安全
  • 软件项目验收测试需进行哪些测试?软件检测机构分享验收测试作用
  • css实现文字描边
  • (二)当人工智能是一个函数,函数形式怎么选择?ChatGPT的函数又是什么?
  • 数据挖掘——回归算法
  • AIGC与未来的通用人工智能(AGI):从生成内容到智能革命
  • jQuery学习笔记3
  • SpringMVC(六)拦截器
  • 单区域OSPF配置实验
  • Linux上vi(vim)编辑器使用教程
  • 虚拟机图像界面打不开了
  • 《经典力学》笔记
  • 【论文+源码】基于Spring和Spring MVC的汉服文化宣传网站
  • 计算机的错误计算(一百九十九)
  • 【AI日记】25.01.02 kaggle 比赛 3-1
  • el-pagination 为什么只能展示 10 条数据(element-ui@2.15.13)
  • Ps:将数据组作为文件导出
  • nohup.out日志
  • 01 背包
  • QT-------------多线程
  • 【JVM】深入了解Java虚拟机-------内存划分、类加载机制、垃圾回收机制
  • k8s部署juicefs
  • 【ArcGIS微课1000例】0136:制作千层饼(DEM、影像、等高线、山体阴影图层)
  • Ajax数据爬取
  • 快速上手大模型的对话生成
  • DateTimeExtensions:一个轻量C#的开源DateTime扩展方法库
  • 题解:监控屏幕调整问题
  • C语言----指针