网站首页 > 教程分享 正文
搞懂 Commonjs、AMD、CMD、UMD、ES Modules
先说Rollup是什么?
是一个打包的ES Module的工具;
Rollup 是一个 JavaScript 模块打包器,可以将小块代码编译成大块复杂的代码,例如 library 或应用程序。Rollup 对代码模块使用新的标准化格式,这些标准都包含在 JavaScript 的 ES6 版本中,而不是以前的特殊解决方案,如 CommonJS 和 AMD。ES6 模块可以使你自由、无缝地使用你最喜爱的 library 中那些最有用独立函数,而你的项目不必携带其他未使用的代码。ES6 模块最终还是要由浏览器原生实现,但当前 Rollup 可以使你提前体验
Rollup并不支持CommonJS和AMD的打包方式
CommonJS
CommonJS主要用于服务端,一个单独的文件就是一个模块,node.js为主要实践者。
提供支持:
- module
- exports
- require
- global
require 命令用于输入其他模块提供的功能
module.exports命令用于规范模块的对外接口,输出的是一个值的拷贝,输出之后就不能改变了,会缓存起来。
CommonJS 采用同步加载模块,而加载的文件资源大多数在本地服务器,所以执行速度或时间没问题。但是在浏览器端,限于网络原因,更合理的方案是使用异步加载。
AMD
采用异步方式加载模块,模块的加载不影响它后面语句的运行。所有依赖这个模块的语句,都定义在一个回调函数中,等到加载完成之后,这个回调函数才会运行。其中 RequireJS 是最佳实践者。
异步加载模块
CMD
CMD(Common Module Definition - 通用模块定义)规范主要是Sea.js推广中形成的,一个文件就是一个模块,可以像Node.js一般书写模块代码。主要在浏览器中运行,当然也可以在Node.js中运行。
- TS:sea,js是什么?SeaJS是一个遵循CMD规范的JavaScript模块加载框架,可以实现JavaScript的模块化开发及加载机制。
它与AMD很类似,不同点在于:AMD 推崇依赖前置、提前执行,CMD推崇依赖就近、延迟执行
UMD
UMD 叫做通用模块定义规范(Universal Module Definition)。也是随着大前端的趋势所诞生,它可以通过运行时或者编译时让同一个代码模块在使用 CommonJs、CMD 甚至是 AMD 的项目中运行。未来同一个 JavaScript 包运行在浏览器端、服务区端甚至是 APP 端都只需要遵守同一个写法就行了。
它没有自己专有的规范,是集结了 CommonJs、CMD、AMD 的规范于一身,我们看看它的具
ES Modules
简称ESM,是 JavaScript 官方的标准化模块系统。
- 它因为是标准,所以未来很多浏览器会支持,可以很方便的在浏览器中使用。(浏览器默认加载不能省略.js)
- 它同时兼容在node环境下运行。
- 模块的导入导出,通过import和export来确定。
- 可以和Commonjs模块混合使用。
- ES modules 输出的数值的引用,输出接口动态绑定,而 CommonJS 输出的是值的拷贝
- ES modules 模块编译时执行,而 CommonJS 模块总是在运行时加载
import { name, github } from './demo.js';
console.log(name(), github());
document.body.innerHTML = `${name()} ${github()}
`
总结
CommonJS 同步加载, AMD 异步加载, UMD = CommonJS + AMD , ES Module 是标准规范, 取代 UMD,是大势所趋。 Tree-shaking 牢记副作用。
- 上一篇: javascript中的模块系统
- 下一篇: 全民健身网络热度调查“居家健身”成为第一网络热词
猜你喜欢
- 2025-03-07 探究前端项目打包构建的用户故事
- 2025-03-07 前端必看!大前端的必备构建工具和由来,到处都在讲模块化开发
- 2025-03-07 一文彻底搞懂JavaScript前端5大模块化规范及其区别
- 2025-03-07 折腾不止前端工程与性能优化
- 2025-03-07 上半年奖励740余人 常州见义勇为工作“年中答卷”亮点纷呈
- 2025-03-07 什么是URL,构成详解-URL是浏览器寻找信息时所需的资源位置
- 2025-03-07 云智慧透视宝前端架构那些事儿
- 2025-03-07 这是一道“送命题”...辅导孩子写作业,45岁男子被气出脑出血
- 2025-03-07 Sealos AI Proxy 发布!一个平台调用所有大模型,再也不用到处找 API
- 2025-03-07 开发资源大整合:编程语言篇--JavaScript(1)
你 发表评论:
欢迎- 最近发表
-
- 免费10年VPS-serv00服务器,注册与自动化保号
- Consul微服务注册中心使用指南
- 谷歌云代理商:注册谷歌云服务器需要准备哪些资料?
- steam账号注册不了/注册失败?好用的解决方法看这里
- 微服务架构中的服务注册与发现有哪些?Zookeeper、Eu
- # 从浅入深 学习 SpringCloud 微服务架构(三)注册中心 Eureka(1)
- 一文深入理解AP架构Nacos注册原理
- 群晖NAS本地搭建NVIDIA v-GPU License Server 授权许可服务器的教程
- IDEA 2024解决We could not validate your license XX
- 保障数据完整性:深入解析Oracle数据库的主键和外键约束
- 标签列表
-
- css导航条 (66)
- sqlinsert (63)
- js提交表单 (60)
- param (62)
- parentelement (65)
- jquery分享 (62)
- check约束 (64)
- curl_init (68)
- sql if语句 (69)
- import (66)
- chmod文件夹 (71)
- clearinterval (71)
- pythonrange (62)
- 数组长度 (61)
- javafx (59)
- 全局消息钩子 (64)
- sort排序 (62)
- jdbc (69)
- php网页源码 (59)
- assert h (69)
- httpclientjar (60)
- postgresql conf (59)
- winform开发 (59)
- mysql数字类型 (71)
- drawimage (61)
本文暂时没有评论,来添加一个吧(●'◡'●)