JavaScript – Modular
前言
我几乎闪过了那几年的 Modular 混乱时代.
CommonJS 火的时候, 我没有用 Node.js
AMD, CMD 火的时候, 我的项目还小, 加上用了 AngularJS 自带模块功能.
后来 UMD SystemJS 火了, 我在用 Angular 了, 从此开启 TypeScript 之路.
一直到最近想整理 TypeScript 笔记, 才顺便把历史补一补.
参考
掘金 – JS模块化方案详解(CommonJS、AMD、CMD、ESModule) (先看)
10分钟带你了解JavaScript模块化的前世今生! (必看)
知乎 – 2020年我们可以在Node中使用ES Modules了吗 (必看)
历史发展
JavaScript 语言设计的时候是没有 Modular 概念的. 因为也没有需求.
一直到 2009 年 Node.js 火了. JavaScript 要运用到后端场景, 这就必然需要改良语言了 (后端耶...超复杂的...) (这有点像现在的 C# 一直加入函数式特色, 就是为了要搞 Blazor 啊)
于是 Node.js 提出了 CommonJS, 一个 js file 表示 1 个模块, 通过 exports 和 require 关键字作为导出, 导入声明.
几年后, 前端需求越来越复杂, JavaScript 代码越来越多, 也需要模块化了. 但是 CommonJS 是按照后端需求设计的. 和前端水土不服丫.
所以 AMD 和 CMD 被提了出来.
AMD 的实现是 RequireJS, CMD 的实现是 Sea.js
后来打包工具出现了, 开发前端需要先用 Node.js 做打包, 最终输出 1 个 js file. 于是模块化的工作又交给了 Node.js
而且许多前端的 library 和后端的 library 是可以通用的, 但是模块管理却不一样... 这时代最混乱.
后来 UMD 出来了. 它的实现是 SystemJS. 它统一了 CommonJS, AMD, CMD 前后端模块规范写法, 通过 SystemJS 都可以导入导出
UMD 稳定了以后, ECMAScript 终于推出了 ES Module.
此后 JavaScript 语言终于是有了名正言顺的 Modular 方案.
而今天, 前端开发用 ES Module 就行了. 但是后端还有许多 CommonJS 的 Library 一时半会儿不可能全部迁移, 但也不必担心. 这些都交由 Webpack 之类的打包工具去搞就可以了.
像我一直受 AngularJS 和 Angular 保护. 从来就没有关心过这些 "底层" 实现.
总结
CommonJS 规范又称 CJS 是给 Node.js 用的 (.cjs)
AMD 规范的是现实 RequireJS 是给前端用的
CMD 规范的实现是 Sea.js 也是给前端用的 (类似 Vue 那样, 就是在某些基础上对某些场景做优化而诞生的)
UMD 规范统一了 CommonJS, AMD, CMD 规范, 它的实现是 SystemJS
ES Module 规范又称 ESM, 正统的 JavaScript Modular 规范. 游览器, Node.js 都支持了. (.mjs)
JavaScript – Modular的更多相关文章
- 关于javascript
Client-Language-----------------------JavaScript/Object-C/Java/C# HTML5 DOM/Template/Data/Ajax/Regul ...
- Modular javascript(javascript模块化编程)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- JavaScript资源大全中文版(Awesome最新版)
Awesome系列的JavaScript资源整理.awesome-javascript是sorrycc发起维护的 JS 资源列表,内容包括:包管理器.加载器.测试框架.运行器.QA.MVC框架和库.模 ...
- 12款简化 Web 开发的 JavaScript 开发框架
前端框架简化了开发过程中,像 Bootstrap 和 Foundation 就是前端框架的佼佼者.在这篇文章了,我们编制了一组新鲜的,实用的,可以帮助您建立高质量的 Web 应用程序的 JavaScr ...
- 推荐15个最好用的 JavaScript 代码压缩工具
JavaScript 代码压缩是指去除源代码里的所有不必要的字符,而不改变其功能的过程.这些不必要的字符通常包括空格字符,换行字符,注释以及块分隔符等用来增加可读性的代码,但并不需要它来执行. 在这篇 ...
- a primary example for Functional programming in javascript
background In pursuit of a real-world application, let’s say we need an e-commerce web applicationfo ...
- JavaScript Module Pattern: In-Depth
2010-03-12 JavaScript Module Pattern: In-Depth The module pattern is a common JavaScript coding patt ...
- 大型 JavaScript 应用架构中的模式
原文:Patterns For Large-Scale JavaScript Application Architecture by @Addy Osmani 今天我们要讨论大型 JavaScript ...
- [转]大型 JavaScript 应用架构中的模式
目录 1.我是谁,以及我为什么写这个主题 2.可以用140个字概述这篇文章吗? 3.究竟什么是“大型”JavaScript应用程序? 4.让我们回顾一下当前的架构 5.想得长远一些 6.头脑风暴 7. ...
- The Top 10 Javascript MVC Frameworks Reviewed
Over the last several months I have been in a constant search for the perfect javascript MVC framewo ...
随机推荐
- 10分钟快速掌握分布式版本控制系统GIT命令集【形成知识体系篇】
任务要求 要求全部使用git命令实现 1.创建本地仓库,项目名称为hniu_site 2.在仓库下创建多级(目录)文件夹cn/hniu/班级名称(例如软件2108,cn/hniu/rj2108) 3. ...
- Elasticsearch tp5使用
下载elassticsearch和kibana的网址:https://www.elastic.co/cn/downloads/?elektra=home&store=hero 下载Elasti ...
- 解决vue.js出现Vue.js not detected错误
第一:在拓展应用的文件夹中找到文件manifest.json,打开并将此处的false改成true. 第二:在vuejs devtool拓展程序的详情页中开启以下两个选项 如果你看到这,恭喜你,看到全 ...
- vue中的<script setup>与<script>
<script setup>是在vue3.2之后新增的语法糖,简化了API的写法 1.声明的变量无需return,可以直接在模板中使用,实现了顶层的绑定 2.引入组件会自动注册,无需再使用 ...
- Scratch全套Q版三国人物角色素材包免费下载
全新Q版三国人物角色素材包,内含142张细腻可爱的Q版风格图片,涵盖三国名将.士兵.场景等丰富元素,为scratch爱好者提供多样选择,适合各类三国主题创作. 免费下载:www.xiaohujing. ...
- Python和RPA网页自动化-让select标签下拉框选择指定文本的方法
以影刀商城(https://shop.yingdao.com/webOperations/index)为例: 该下拉框有<select>标签.分别使用Python和RPA网页自动化让下拉框 ...
- Jmeter函数助手34-digest
digest函数用于返回特定哈希算法的加密值. 算法摘要:填入算法,如MD2.MD5.SHA-1.SHA-224.SHA-256.SHA-384.SHA-512 String to be hashed ...
- 【Java】Input,Output,Stream I/O流 02 文件流 & 缓冲流
Reader & Writter 只适合文本的输入输出 [.txt .java .c .cpp] 传输文件,不能使用文本IO进行读写,需要使用文件输入输出流 public class IOTe ...
- 【Front-End】获取视频资源
需求场景: 我妈发个消息,在某某是网站上发现一个很好的视频,对我妈来说是一个有用的视频资源 但是视频网站不提供下载功能,叫我来帮她获取这个资源 一般来说可以利用一些东西来实现这个需求 这个是视频地址: ...
- 【转载】 Ubuntu 中开机自动执行脚本的两种方法
原文地址: https://www.jianshu.com/p/6366d7070642 作者:貘鸣来源:简书 ============================================ ...