“历史不是过去,历史正在上演。随着 W3C 等规范、以及浏览器的飞速发展,前端的模块化开发会逐步成为基础设施。一切终究都会成为历史,未来会更好。”——引用玉伯原文最后一段话,我个人也非常赞同。既然谈到了“未来”,我个人认为:前端 js 模块如果继续发展,其模块格式很可能会成为未来 WEB 一种标准规范,产生多种实现方式。就好比 JSON 格式一样,最终成为标准、被浏览器原生实现。
谁更有能成为未来的异步模块标准?SeaJS 遵循 CMD 规范,RequireJS 遵循 AMD 规范,先从这两种不同的格式说起。
CMD
CMD 模块依赖声明方式:
define(function (require) {
var a = require('./a');
var b = require('./b');
// more code ..
})
CMD 依赖是就近声明,通过内部require方法进行声明。但是因为是异步模块,加载器需要提前加载这些模块,所以模块真正使用前需要提取模块里面所有的依赖。无论是加载器即时提取,还是通过自动化工具预先提取,CMD 的这种依赖声明格式只能通过静态分析方式实现,这也正是 CMD 的弊端所在。
CMD 规范的弊端
不能直接压缩:require是局部变量,意味着不能直接的通过压缩工具进行压缩,若require这个变量被替换,加载器与自动化工具将无法获取模块的依赖。
模块书写有额外约定:路径参数不能进行字符串运算,不能使用变量代替,否则加载器与自动化工具无法正确提取路径。
规范之外的约定意味着更多的文档说明,除非它们也是规范中的一部分。
注:SeaJS 静态分析实现是把模块包toString()后使用正则提取require部分得到依赖的模块路径。
AMD
AMD 模块依赖声明方式:
define(['./a', './b'], function (a, b) {
// more code ..
})
AMD 的依赖是提前声明。这种优势的好处就是依赖无需通过静态分析,无论是加载器还是自动化工具都可以很直接的获取到依赖,规范的定义可以更简单,意味着可能产生更强大的实现,这对加载器与自动化分析工具都是有利的。
AMD 规范的弊端
依赖提前声明在代码书写上不是那么友好。
模块内部与 NodeJS 的 Modules 有一定的差异。
关于第二点的问题需要特别说明下。其实无论是 CMD 还是 AMD 的异步模块,都无法与同步模块规范保持一致(NodeJS 的 Modules),只有谁比谁更像同步模块而已。AMD 要转换为同步模块,除了去掉define函数的包裹外,需要在头部使用require把依赖声明好,而 CMD 只需要去掉define函数的包裹即可。
总结
从规范上来说,AMD 更加简单且严谨,适用性更广,而在 RequireJS 强力的推动下,在国外几乎成了事实上的异步模块标准,各大类库也相继支持 AMD 规范。
但从 SeaJS 与 CMD 来说,也做了很多不错东西:
1、相对自然的依赖声明风格
2、小而美的内部实现
3、贴心的外围功能设计
4、更好的中文社区支持
如果有可能,我希望看到 SeaJS 也支持 AMD,与前端社区大环境保持一致最终幸福的是广大开发者。

SpringBoot和SpringMVC都是Java开发中常用的框架,但它们之间有一些明显的差异。本文将探究这两个框架的特点和用途,并对它们的差异进行比较。首先,我们来了解一下SpringBoot。SpringBoot是由Pivotal团队开发的,它旨在简化基于Spring框架的应用程序的创建和部署。它提供了一种快速、轻量级的方式来构建独立的、可执行

在移动互联网时代,手机的性能一直是用户关注的焦点之一。而作为手机芯片市场领头羊的联发科和高通,其旗下的芯片也备受消费者瞩目。近期,联发科推出了天玑8200芯片,而高通则有其代表性的骁龙系列芯片。那么,这两款芯片之间究竟存在怎样的差异呢?本文将对天玑8200与骁龙进行深度的对比分析。首先,从制程工艺来看,天玑8200采用了最新的6nm制程工艺,而高通骁龙的一些

Oracle数据库一直是企业级数据库管理系统的领导者之一,其不断更新迭代的版本也引起了广泛关注。其中,Oracle11g和Oracle12c两个版本作为比较具有代表性的版本,有着许多的差异。本文将针对Oracle11g和Oracle12c的一些重要差异做一些解读,并附上具体的代码示例,帮助读者更深入地了解这两个版本的区别。一、架构差异Oracle1

版本控制:基础版本控制是一种软件开发实践,允许团队跟踪代码库中的更改。它提供了一个中央存储库,其中包含项目文件的所有历史版本。这使开发人员能够轻松回滚错误,查看不同版本的差异,并协调对代码库的并发更改。Git:分布式版本控制系统git是一种分布式版本控制系统(DVCS),这意味着每个开发人员的计算机都拥有整个代码库的完整副本。这消除了对中心服务器的依赖,提高了团队的灵活性和协作能力。Git允许开发人员创建和管理分支,跟踪代码库的历史,并与其他开发者共享更改。Git与版本控制:关键区别分布式vs集

Go语言与Java的差异:语法与编程模型Go语言和Java都是现代流行的编程语言,具有许多相似之处,但也有许多差异。这些差异主要体现在语法和编程模型上。语法1.变量声明Go语言中,变量声明需要使用var关键字,而Java中则不需要。例如:varaintinta;2.类型推断Go语言支持类型推断,即编译器可以自动推断变量的类型。例如:a:=10编

质量评测:一加与荣耀的差异在当今手机市场竞争激烈的环境下,消费者对于手机的质量要求越来越高。在众多手机品牌中,一加和荣耀作为备受关注的品牌之一,备受消费者青睐。两者在市场上拥有一定的话语权,但在质量方面究竟有何差异?本文将从手机质量、性能、用户体验等方面对一加与荣耀进行对比评测,以帮助消费者更好地选择适合自己的手机品牌。一、外观设计一加手机一直以简洁、大气的

Golang是一门广受欢迎的编程语言,其在并发编程方面拥有独特的设计理念。在Golang中,堆栈(heap和stack)的管理是一项非常重要的任务,对于理解Golang程序的运行机制至关重要。本文将深入探讨Golang中堆栈的差异,并通过具体的代码示例来展示它们之间的区别和联系。在计算机科学中,堆栈是两种常见的内存分配方式,它们在内存管理和数据存储上有着不同

Tomcat和Nginx的差异及比较随着互联网的快速发展,网络应用的需求也越来越高,同时Web服务器也得到了越来越多的关注。Tomcat和Nginx作为两个广泛使用的Web服务器,在不同的场景下展现出各自的优势和特点。本文将从不同的角度来对Tomcat和Nginx进行比较,探讨它们的差异。一、背景在深入比较Tomcat和Nginx之前,我们先来了解一下它们的


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

Dreamweaver CS6
视觉化网页开发工具

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

WebStorm Mac版
好用的JavaScript开发工具

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。