模块化之CJS, AMD, UMD 和 ESM

news2024/11/16 23:56:58

[[toc]]

模块化优点

  • 防止命名冲突
  • 代码复用
  • 高维护性

CJS, AMD, UMD 和 ESM

历史

  • ES6之前,JS一直没有自己的模块体系
  • 后来社区出现了CommonJS和AMD,
  • CommonJS 主要用于服务器(Node)
  • AMD 主要用于浏览器
  • ES6引入了ESM
  • 到此,JS终于有了自己的模块体系,基本上可以完全取代CJS和AMD

服务端:

  • 同步加载模块
  • CommonJS => NodeJS、Browserify

客户端

  • 异步加载模块
  • AMD => requireJS
  • CMD => seaJS

Snipaste_2023-08-13_12-20-15

CJS:server

  • CJS 是 CommonJS 的缩写。
  • 针对环境: 服务器端,2009年,Node 就是使用 CJS 模块
  • 如何识别: module.exportsrequire()

特点:

  • CJS 不能在浏览器中工作,它必须经过转换和打包,Browserify 工具,我们可以在浏览器端使用采用CommonJS规范的js文件
  • 运行: 同步导入模块
  • 加载: 动态,被加载的时候运行
  • 输出: 值的浅拷贝
  • CJS 模块加载 ESM 模块: 不能使用require命令,而要使用import()函数
// 1. CJS 基本使用
// 定义模块
const obj = {
   a: 1};
module.exports = obj;
// 使用模块
const obj = require('./test.js');
// 2. CJS 输出值拷贝
/*************** a.js**********************/
let count = 0
exports.count = count; // 输出值的拷贝
exports.add = ()=>{
   
    //这里改变count值,并不会将module.exports对象的count属性值改变
    count++;
}
/*************** b.js**********************/
const {
    count, add } = require('./a.js')
console.log(count) //0
add();
console.log(count)//0

AMD:client

  • 英文名: Asynchronous Module Definition
  • 中文名: 异步模块化定义方案
  • 针对环境: web浏览器,异步适合浏览器
  • 项目目标: JavaScript生态的模块化解决方案
  • 如何识别: define(id?, dependencies?, factory) + require

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

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

相关文章

TCP流量控制和拥塞控制

文章目录 流量控制拥塞控制 流量控制 当发送方发送速率大于接收方的处理速率时,接收方会把数据包放入缓冲区,当缓冲区满了,就只能将数据包丢弃。为了应对这种情况,流量控制就可以大展身手了 流量控制的作用对象是发送方和接收方 …

【计算文献解读】ACS Catal.:塑料垃圾回收利用中的均相催化

合理的塑料回收对于解决与塑料垃圾相关的环境挑战至关重要,而在各种回收方法中,化学回收,特别是通过均相催化,有望将塑料垃圾转化为有价值的产品。由于聚烯烃链的结构不均匀性和功能化,聚合物废物对催化循环提出了挑战…

AI人工智能大模型业务到底有多烧钱?

AI大模型业务确实是一个非常烧钱的行业。首先,大模型的训练需要大量的计算资源。 这些模型通常由数百万个参数组成,训练它们需要大量的计算能力和存储空间。这意味着公司需要购买大量的高性能服务器、图形处理单元和存储设备,这些都是非常昂…

Nvidia显卡Failed to initialize NVML Driver/library version mismatch错误解决方案

最近GPT比较火,开始折腾了一下gpu,用来跑项目: https://github.com/OpenTalker/SadTalker 今天运行程序突然发现用不了,经排查应该是由于NVIDIA内核驱动版本与系统驱动版本不一致导致的。 下面简单总结了这个错误的解决方案。 问题复现 查看…

如何规划并新建大数据平台的独立生产域?5步走

一般来说,大数据平台包括以下4类数据生产域——生产生态环境(正式生产环境)、开发和测试环境、培训和演示环境、灾备环境。各生产域在由平台提供资源、安全、监控、故障恢复等保障的同时,不同的生产域之间还需要严格隔离&#xff…

宏观角度认识递归之 Pow(x,n) 问题

50. Pow(x, n) - 力扣(LeetCode) 计算 x 的 n 次幂,如果是直接暴力求解的话,会造成计算时间周期过长,所以要从别的角度出发,将幂等数分为两个幂等数相乘,例如:三的八次方&#xff0c…

Python基础入门(19)----Python单元测试基础:unittest模块的基本使用

文章目录 创建测试用例测试套件断言运行测试测试固件Python的unittest模块是基于Java的JUnit框架开发出来的,提供了编写和运行单元测试的工具。这篇文章将介绍unittest模块的基本使用,涵盖创建测试用例、测试套件、断言、运行测试以及测试固件的使用。 创建测试用例 在unit…

货币转换

维护货币汇率 事务代码:OB08 调用BAPI CALL FUNCTION BAPI_EXCHANGERATE_GETDETAILEXPORTINGrate_type Mfrom_curr ls_ekko-waersto_currncy CNYdate sy-datumIMPORTINGexch_rate ls_exch_ratereturn ls_return.ls_zsmm043-header-rmb_price …

python解析xmind统计测试用例/测试点 个数及执行情况

前言:统计的是每个分支最后一个节点的状态 xmind版本 23.0911172 标记打开位置 标记规则如下 解释: res {"total": 0, "pass": 0, "fail": 0, "no_result": 0, "unfinished": 0, "now_fail…

MCU测试科普|如何进行MCU芯片测试,具体流程是什么?

MCU芯片测试系统是一种专门用于检测MCU芯片性能和质量的综合性设备。它通常由硬件和软件两部分组成,硬件包括测试仪器、适配器、测试夹具等,用于连接被测MCU芯片和测试机,实现高效高精度的测试。软件部分通常包括测试程序、测试管理软件等&am…

安全狗连续5年零失误守护金鸡奖颁奖典礼安全

11月4日,第36届中国电影金鸡奖颁奖典礼暨2023年中国金鸡百花电影节闭幕式在厦门圆满落幕。 作为国内云原生安全领导厂商,安全狗再一次收到客户委托,为其颁奖活动期间的相关宣传窗口、网页和系统的网络安全全程护航。 01 台上幕后 荣耀守护 …

openGauss学习笔记-117 openGauss 数据库管理-设置数据库审计-查看审计结果

文章目录 openGauss学习笔记-117 openGauss 数据库管理-设置数据库审计-查看审计结果117.1 前提条件117.2 背景信息117.3 操作步骤 openGauss学习笔记-117 openGauss 数据库管理-设置数据库审计-查看审计结果 117.1 前提条件 审计功能总开关已开启。需要审计的审计项开关已开…

网络的地址簿:Linux DNS服务的全面指南

1 dns 1.1 dns(域名解析服务)介绍 当访问 www.baidu.com 首先查询/etc/hosts,如果没有再去查询/etc/resolv.conf,还是没有就去查询域名服务器 关于客户端: /etc/resolv.conf ##dns指向文件 nameserver 172.25.254.20测试&…

深入了解Redission分布式锁原理以及可重入锁的原理

Redisson是一个基于Redis的Java框架,用于实现各种分布式功能,包括分布式锁。Redisson提供了多种分布式锁的实现,其中包括可重入锁、公平锁、联锁(多个锁同时锁定或释放)、红锁(多个独立Redis节点的分布式锁…

一个java文件的JVM之旅 | 京东物流技术团队

准备 我是小C同学编写得一个java文件,如何实现我的功能呢?需要去JVM(Java Virtual Machine)这个地方旅行。 变身 我高高兴兴的来到JVM,想要开始JVM之旅,它确说:“现在的我还不能进去,需要做一次转换&…

不会写文档的程序员不是好的程序员

在当今数字化的世界中,软件开发行业正经历着前所未有的繁荣。从移动应用到大型企业系统,软件构建了现代社会的基础。在IT行业中,文档是一种非常重要的沟通工具。它可以帮助程序员和客户及团队成员之间进行有效的沟通和协作,提高工…

CMake编译命令笔记

项目主目录存在一个CMakeLists.txt文件两种方式设置编译规则 编译流程 上级目录 和 上上级目录的代码 两种构建方式(推荐使用外部构建)

基于单片机智能加湿器控制系统仿真设计

**单片机设计介绍, 698【毕业课设】基于单片机智能加湿器控制系统仿真设计 文章目录 一 概要系统组成总结 二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 单片机智能加湿器控制系统仿真设计介绍 单片机智能加湿器控制系统是一种利用微…

DDD技术方案落地实践 | 京东云技术团队

1. 引言 从接触领域驱动设计的初学阶段,到实现一个旧系统改造到DDD模型,再到按DDD规范落地的3个的项目。对于领域驱动模型设计研发,从开始的各种疑惑到吸收各种先进的理念,目前在技术实施这一块已经基本比较成熟。在既往经验中总…

响应式编程-Project Reactor Mono 介绍

响应式编程-Project Reactor Mono 介绍 本文以Mono的角度来介绍Reactor编程,Flux的使用同理。 初体验 Web应用 controller 方法在Spring webmvc 和 Spring webFlux下Controller方法实现示例如下: Spring webmvc: GetMapping("/test1") …