前言

我几乎闪过了那几年的 Modular 混乱时代.

CommonJS 火的时候, 我没有用 Node.js

AMD, CMD 火的时候, 我的项目还小, 加上用了 AngularJS 自带模块功能.

后来 UMD SystemJS 火了, 我在用 Angular 了, 从此开启 TypeScript 之路.

一直到最近想整理 TypeScript 笔记, 才顺便把历史补一补.

参考

掘金 – JS模块化方案详解(CommonJS、AMD、CMD、ESModule) (先看)

简书 – JavaScript 模块化的前世今生

10分钟带你了解JavaScript模块化的前世今生! (必看)

知乎 – 2020年我们可以在Node中使用ES Modules了吗 (必看)

知乎 – SystemJS 探秘

历史发展

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的更多相关文章

  1. 关于javascript

    Client-Language-----------------------JavaScript/Object-C/Java/C# HTML5 DOM/Template/Data/Ajax/Regul ...

  2. Modular javascript(javascript模块化编程)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. JavaScript资源大全中文版(Awesome最新版)

    Awesome系列的JavaScript资源整理.awesome-javascript是sorrycc发起维护的 JS 资源列表,内容包括:包管理器.加载器.测试框架.运行器.QA.MVC框架和库.模 ...

  4. 12款简化 Web 开发的 JavaScript 开发框架

    前端框架简化了开发过程中,像 Bootstrap 和 Foundation 就是前端框架的佼佼者.在这篇文章了,我们编制了一组新鲜的,实用的,可以帮助您建立高质量的 Web 应用程序的 JavaScr ...

  5. 推荐15个最好用的 JavaScript 代码压缩工具

    JavaScript 代码压缩是指去除源代码里的所有不必要的字符,而不改变其功能的过程.这些不必要的字符通常包括空格字符,换行字符,注释以及块分隔符等用来增加可读性的代码,但并不需要它来执行. 在这篇 ...

  6. 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 ...

  7. JavaScript Module Pattern: In-Depth

    2010-03-12 JavaScript Module Pattern: In-Depth The module pattern is a common JavaScript coding patt ...

  8. 大型 JavaScript 应用架构中的模式

    原文:Patterns For Large-Scale JavaScript Application Architecture by @Addy Osmani 今天我们要讨论大型 JavaScript ...

  9. [转]大型 JavaScript 应用架构中的模式

    目录 1.我是谁,以及我为什么写这个主题 2.可以用140个字概述这篇文章吗? 3.究竟什么是“大型”JavaScript应用程序? 4.让我们回顾一下当前的架构 5.想得长远一些 6.头脑风暴 7. ...

  10. 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 ...

随机推荐

  1. vue --version 显示的却是vue cli的版本号,为什么?

    vue --version 显示的却是vue cli的版本号,为什么? 如果您在运行 vue --version 命令时显示的是 Vue CLI 的版本号,而不是 Vue.js 的版本号,那可能是因为 ...

  2. CSP2023

    坐标HA 背景 NOIP都打完了,CSP-S都没写游记,所以来补一篇(逃-- 正文 Day 7*-1 考前一周停课集训,被whk老师怒斥不务正业,悲QWQ. Day 0 周五得到年级第一zyx的鼓励, ...

  3. ABC350

    A link 把最后三位取成数字,判断是否小于\(349\),大于\(1\),不等于\(316\). 点击查看代码 #include<bits/stdc++.h> using namesp ...

  4. 关于我自己的Gui界面库完善

    仓库地址:https://gitee.com/GPRO/Gui 功能说明:  解析XML, 接入AngleScript. 接下来需要做的: 因为有了WPF,MFC,HTML甚至UE5的使用经验,这里我 ...

  5. spring boot 快速入门(一)创建一个简单的Spring Boot项目

    1.什么是Spring Boot Spring Boot makes it easy to create stand-alone, production-grade Spring based Appl ...

  6. 解决 IIS Express 启动错误:“拒绝访问”问题

    报错 Starting IIS Express ... stderr: Failed to register URL "http://localhost:8378/" for si ...

  7. mybatisplus实现一次多表联查+分页查询

    众所周知,mybatisplus非常好用,但是他不好用就不好用在不可以多表联查.在mybatisplusjoin中提供了联查的方法,那个参数我没看懂Orz 不过,历经千辛万苦,我通过xml终于写出来了 ...

  8. python实例化对象过程

    python实例化对象过程 Python中存在着一种静态的__new__()方法,通常在定义类时不会重写__new__()方法,于是Python在调用类时会自动寻找该类的继承对象(本例中为Object ...

  9. android:inputType 类型详细介绍

    //文本类型,多为大写.小写和数字符号.android:inputType="none"//输入普通字符android:inputType="text"//输入 ...

  10. 【Oracle】Windows-19C 下载安装

    下载 Download 官网下载地址[需要Oracle账号]: https://www.oracle.com/database/technologies/oracle-database-softwar ...