模块化之CJS, AMD, UMD 和 ESM

[[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.hqwc.cn/news/165101.html

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

相关文章

kubernetes集群编排——k8s调度

nodename vim nodename.yaml apiVersion: v1 kind: Pod metadata:name: nginxlabels:app: nginxspec:containers:- name: nginximage: nginxnodeName: k8s2 nodeName: k8s2 #找不到节点pod会出现pending,优先级最高 kubectl apply -f nodename.yamlkubectl get pod …

2023 全栈工程师 Node.Js 服务器端 web 框架 Express.js 详细教程(更新中)

Express 框架概述 Express 是一个基于 Node.js 平台的快速、开放、极简的Web开发框架。它本身仅仅提供了 web 开发的基础功能,但是通过中间件的方式集成了外部插件来处理HTTP请求,例如 body-parser 用于解析 HTTP 请求体,compression 用于压…

【Kotlin精简】第7章 泛型

1 泛型 泛型即 “参数化类型”,将类型参数化,可以用在类,接口,函数上。与 Java 一样,Kotlin 也提供泛型,为类型安全提供保证,消除类型强转的烦恼。 1.1 泛型优点 类型安全:通用允许…

unity Holoens2开发,使用Vuforia识别实体或图片 触发交互

建议:先看官方文档 我使用的utniy 版本:Unity 2021.3.6f1 官方建议:混合现实工具包简介 - 设置项目并使用手势交互 - Training | Microsoft Learn 配置了正确工具的 Windows 10 或 11 电脑Windows 10 SDK 10.0.18362.0 或更高版本安装了 U…

netty (二) netty原理详解

netty高性能架构设计 netty 写一个简单的demo 服务器端 package com.atguigu.netty.simple;import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.*; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.SocketChannel; import …

一个基于百度飞桨封装的.NET版本OCR工具类库 - PaddleOCRSharp

前言 大家有使用过.NET开发过OCR工具吗?今天给大家推荐一个基于百度飞桨封装的.NET版本OCR工具类库:PaddleOCRSharp。 OCR工具有什么用? OCR(Optical Character Recognition)工具可以将图像或扫描文件中的文本内容转…

SQL审计是什么意思?目的是什么?有什么好处?

很多刚入行的运维小伙伴对于SQL审计不是很了解,不知道其是什么意思?使用SQL审计的目的是什么?使用SQL审计的好处有哪些?这里我们大家就来一起聊聊,仅供参考哈! SQL审计是什么意思? 【回答】&…

Docker实战

一、Docker安装 以下均以CentOS 7为例 1、安装Docker yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin 2、启动和校验 # 启动Docker systemctl start docker# 停止Docker systemctl stop docker# 重启 systemctl resta…

TensorFlow(1):深度学习的介绍

1 深度学习与机器学习的区别 学习目标:知道深度学习与机器学习的区别 区别:深度学习没有特征提取 1.1 特征提取方面 机器学习的特征工程步骤是要靠手动完成的,而且需要大量领域专业知识深度学习通常由多个层组成,它们通常将更简…

远程运维用什么软件?可以保障更安全?

远程运维顾名思义就是通过远程的方式IT设备等运行、维护。远程运维适用场景包含因疫情居家办公,包含放假期间出现运维故障远程解决,包含项目太远需要远程操作等等。但远程运维过程存在一定风险,安全性无法保障,所以一定要选择靠谱…

企业微信开启接收消息+验证URL有效性

企业微信开启接收消息验证URL有效性 📔 千寻简笔记介绍 千寻简笔记已开源,Gitee与GitHub搜索chihiro-notes,包含笔记源文件.md,以及PDF版本方便阅读,且是用了精美主题,阅读体验更佳,如果文章对…

1212. 地宫取宝

题目&#xff1a; 1212. 地宫取宝 - AcWing题库 思路&#xff1a;dp&#xff08;最长上升子序列和摘花生的结合&#xff09; 代码&#xff1a; #include<iostream> using namespace std; const int N 55; const int MOD 1000000007;int n, m, k; int w[N][N];//每个坐…