CommonJS 功能介绍

CommonJS是JavaScript的模块化规范,主要用于服务器端(如Node.js)的模块化开发,其核心功能和特点如下:

一、核心功能

  1. 模块定义与导出

    • module.exports:用于导出模块的内容,可以是函数、对象、变量等。例如:
      module.exports = function(a, b) { return a + b; }; // 导出单个函数
      module.exports = { add, subtract }; // 导出多个方法[^1^][^4^]
      
    • exportsmodule.exports的简写引用,用于简化导出操作。例如:
      exports.sayHello = function(name) { return `Hello, ${name}`; }; [^4^]```
  2. 模块导入

    • require():同步导入模块并返回其导出的内容。例如:
      const math = require('./math'); // 导入整个模块
      const { add } = require('./math'); // 解构导入[^1^][^4^]
      

二、关键特点

  1. 同步加载

    • 模块加载是同步的,执行require时会阻塞后续代码,直到模块加载完成。适用于服务器端本地文件加载(速度快),但不适合浏览器环境[1][4]。
  2. 单例模式与缓存

    • 每个模块在首次加载后会被缓存,后续require同一模块直接返回缓存实例。例如:
      const moduleA = require('./module');
      const moduleB = require('./module');
      console.log(moduleA === moduleB); // true[^1^][^4^]
      
  3. 动态导入

    • 支持运行时动态加载模块,根据条件灵活导入不同模块。例如:
      if (condition) {const moduleA = require('./moduleA');
      } else {const moduleB = require('./moduleB');
      }[^1^][^4^]
      
  4. 文件即模块

    • 每个文件视为独立模块,拥有单独的作用域,避免全局变量污染[2][4]。

三、模块加载机制

  1. 加载流程

    • 路径解析:优先从缓存中查找模块;若未缓存,则检查是否为核心模块(如fs);否则按路径查找文件模块[4]。
    • 文件扩展名:自动按.js.json.node顺序补全后缀[2]。
    • 编译与执行:加载后立即编译并执行模块代码[4]。
  2. 循环依赖处理

    • 通过缓存机制解决循环依赖,但需注意模块的加载顺序和状态[3][4]。

四、应用场景

  1. 服务器端开发

    • Node.js默认使用CommonJS,适合后端代码的组织与管理。例如,通过require引入数据库驱动、路由模块等[1][4]。
  2. 前端开发

    • 需通过构建工具(如Webpack、Browserify)将CommonJS模块转换为浏览器兼容格式。例如:
      # 使用Webpack打包
      webpack --entry ./src/index.js --output ./dist/bundle.js [^5^]
      

五、与ES模块(ESM)的对比

特性CommonJSES模块(ESM)
语法require()module.exportsimportexport
加载方式同步加载(阻塞)异步加载(非阻塞)
动态导入支持require()动态加载需使用import()返回Promise
缓存机制模块单例缓存无默认缓存(可通过import实现)
适用环境服务器端(Node.js)浏览器端、现代前端工程
静态分析不支持(运行时解析)支持(编译时优化)

六、总结

CommonJS通过同步加载、单例缓存和简单的API设计,成为服务器端JavaScript模块化的事实标准。虽然ES模块在现代前端开发中更受青睐,但在Node.js生态和旧项目中,CommonJS仍具有重要价值[1][4][5]。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/91594.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/91594.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3D材质总监的“光影魔法”:用Substance Sampler AI,“擦除”照片中的光影

在三维视觉艺术的创作中,我们始终在探索一对核心的“对立统一”:一方面是**“现实世界的光照”(Real-World Lighting),它被固定、“烘焙”在一张照片的像素之中;另一方面是“虚拟世界的光照”(V…

从高斯噪声的角度分析MAE和MSE

文章目录1. MAE与MSE的本质区别2. 高斯噪声下的统计特性3. MAE导致稀疏解的内在机制4. 对比总结1. MAE与MSE的本质区别 MAE(Mean Absolute Error)和MSE(Mean Squared Error)是两种常用的损失函数,它们的数学形式决定了…

AR智能巡检:制造业零缺陷安装的“数字监工”

在制造业中,设备安装与组装环节的准确性是产品质量和生产效率的关键。传统的人工巡检和纸质作业指导书容易因人为疏忽、经验不足或信息滞后导致安装错误,进而引发返工、延误甚至安全事故。然而,随着增强现实(AR www.teamhelper.cn…

js最简单的解密分析

js最简单的解密分析 一、JavaScript 代码保护技术简介 ✅ 为什么要保护 JavaScript 代码? JavaScript 是前端语言,代码在浏览器中是完全可见的。这意味着: 别人可以轻松查看你的核心算法或业务逻辑页面上的接口地址、加密逻辑等容易被抓包分析…

React强大且灵活hooks库——ahooks入门实践之开发调试类hook(dev)详解

什么是 ahooks? ahooks 是一个 React Hooks 库,提供了大量实用的自定义 hooks,帮助开发者更高效地构建 React 应用。其中开发调试类 hooks 是 ahooks 的一个重要分类,专门用于开发调试阶段,帮助开发者追踪组件更新和副…

React强大且灵活hooks库——ahooks入门实践之副作用类hook(effect)详解

什么是 ahooks? ahooks 是一个 React Hooks 库,提供了大量实用的自定义 hooks,帮助开发者更高效地构建 React 应用。其中副作用类 hooks 是 ahooks 的一个重要分类,专门用于处理各种副作用操作,如定时器、防抖、节流等…

SpringBoot一Web Flux、函数式Web请求的使用、和传统注解@Controller + @RequestMapping的区别

一、函数式 Web 在 Spring Boot 中,使用函数式 Web(Function-based Web)可以通过 RouterFunction 和 HandlerFunction 来定义路由和请求处理逻辑。这种方式与传统的注解驱动的方式不同,它更加简洁,并且适合响应式编程。…

Vue+Cesium快速配置指南

安装必要依赖在项目根目录下运行以下命令安装vue-cesium和cesium:npm install vue-cesium3.1.4 cesium1.84配置Vite在vite.config.js文件中添加以下配置:import { defineConfig } from vite import vue from vitejs/plugin-vue import { resolve } from …

矿业自动化破壁者:EtherCAT转PROFIBUS DP网关的井下实战

在深井钻机的轰鸣、矿石输送带的奔流与通风设备的不息运转中,矿业生产的脉搏强劲跳动。然而,这片创造价值的土地,却为自动化技术的深入设置了严苛的考场:信息孤岛林立: 高效现代的EtherCAT控制系统与井下大量稳定服役的…

SpringBoot+Loki4j+Loki+Grafana搭建轻量级日志系统

文章目录前言一、组件介绍(一)Loki特点架构适用场景总结(二)Loki4j特点(三)Grafana特点适用场景二、组件配置(一)Loki(二)Grafana三、项目搭建参考文章前言 …

SpringCloud之Config

SpringCloud之Config 推荐网站:https://www.springcloud.cc/spring-cloud-dalston.html#_spring_cloud_config 1. 什么是 Spring Cloud Config Spring Cloud Config 是 Spring 官方提供的 分布式配置中心 组件,用来 集中管理、动态下发、版本控制 所有微…

探索VB.NET中的贝塞尔Bezier曲线绘制技巧

简介:Bezier曲线是计算机图形学中用于创建平滑曲线的重要工具,广泛应用于图形设计、游戏开发、CAD系统等领域。本文深入探讨了Bezier曲线的基础知识,并详细说明了如何在Visual Basic中使用 Graphics 对象的 DrawBezier 方法绘制曲线。通过理论…

分布式分片策略中,分片数量的评估与选择

分布式分片策略中,分片数量的评估与选择是影响系统性能、扩展性和运维成本的核心问题 一、分片数量评估方法论 1. ​​数据量基准模型​​ ​​单分片容量建议​​:根据Elasticsearch最佳实践,单个分片建议控制在10-50GB(冷数据可放宽至100GB),超过100GB会导致段合并效率…

Vue3高级特性:深入理解effectScope及其应用场景

系列文章目录 Vue3 组合式 API 进阶:深入解析 customRef 的设计哲学与实战技巧 Vue3 watchEffect 进阶使用指南:这些特性你可能不知道 Vue3高级特性:深入理解effectScope及其应用场景 文章目录系列文章目录前言一、核心概念1、什么是 effect…

Docker 中的动态配置:docker update 命令与环境变量管理

Docker 中的动态配置:docker update 命令与环境变量管理 在 Docker 容器的日常管理中,动态调整配置以适应业务需求变化是常见的操作。docker update 命令作为 Docker 平台的重要工具,为运行中的容器提供了便捷的配置调整方式,而环…

ELK 使用教程采集系统日志

作者:小凯 沉淀、分享、成长,让自己和他人都能有所收获! 本文的宗旨在于通过易于上手实操的方式,教会读者完成系统ELK日志采集的对接和使用。那你知道对于一个系统的上线考察,必备的几样东西是什么吗?其实这…

小程序部分pai

wx.setClipboardData 这是微信小程序提供的 API,用于将数据复制到剪贴板。 Page({data: {clientInfo: {email: exampleexample.com // 假设的邮箱数据}},// 复制邮箱到剪贴板copyEmail: function() {wx.setClipboardData({data: this.data.clientInfo.email,success…

【解决方案】鸿蒙 / 矿鸿系统 Shell 无故退出问题(息屏导致)详解

平台环境 OpenHarmony 版本:4.1 release开发板:DAYU / RK3568调试工具:hdc 在使用 OpenHarmony 4.1 Release(矿鸿系统)进行开发时,遇到这样的问题: 🚨 Shell 会在一段时间后自动退出…

Data Analysis TTAD=>CNN-BiGRU-MSA

TTAO 预处理、CNN-BiGRU-MSA 模型 时序数据回归分析时序数据分析方法,特点:TTAO 预处理:通过三角拓扑结构增强时序特征的局部和全局关系混合模型架构:CNN 层提取局部特征模式BiGRU 捕获双向时序依赖多头自注意力机制进行序列建模…

python-字典、集合、序列切片、字符串操作(笔记)

一、字符串常见操作(重点)​1.​2.字符串无法修改#错误示范 str1"djskds" str1[2]"3"3.​str1"abcand" # 输出3 print(str1.index("and"))4.​str1"abcand" newStrstr1.replace("and",&quo…