node.js之---CommonJS 模块

CommonJS概念

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

CommonJS 模块的基本特性

模块导出

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

1、module.exportsexports 的关系

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

2、关键区别

  1. 初始化时的关系

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

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

模块导入

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

javascript 复制代码
// 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 导出访问。这样可以避免命名冲突。

相关推荐
空の鱼11 小时前
Mac 上 Node 版本管理(brew + nvm 共存方案)
macos·node.js
请你吃div11 小时前
Node 后端项目 Docker 自动部署教程(GitHub + 宝塔 + Self-hosted Runner)
后端·docker·node.js
泠曦れいひ13 小时前
在当前项目中安装Vite
前端框架·npm·node.js
Joseph 乔13 小时前
【NVM】node 和 nvm 卸载(安装 node & nvm & npm & cnpm & yarn 及配置)
npm·node.js
frjc17 小时前
Node.js 与 npm 极简安装教程
前端·npm·node.js
水獭比特1 天前
工作流都公开了,为什么还不能继承 Owner 权限?
javascript·人工智能·node.js
冲冲1 天前
nvm-windows的安装
node.js
秋秋小事2 天前
LangChain的核心概念与生态
node.js
翼龙云_cloud2 天前
阿里云国际服务器代理商:ECS 快速部署 Node.js 项目实战指南
服务器·阿里云·node.js
FEF前端团队2 天前
小程序微信支付 V3 接入实战手册:从商户配置到前后端落地
javascript·后端·node.js