历史不是过去,历史上,W3C等规格,和
浏览器的快速发展,对前端模块化发展将逐渐成为基础设施。一切终将成为历史,而未来会更好。引用于波的原文最后一段,我个人同意现在我谈论未来,我认为如果前端js模块的不断发展,其模块的格式可能会成为
网络未来的标准规范,将有不同的方式去实现它。像JSON格式,它最终会变成一个标准和实施
本地浏览器。
谁更有能力成为未来的异步模块seajs CMD规范,和RequireJS跟随AMD的规范,从这两个不同的格式。
cmd
CMD模块依赖声明
模式:
复制代码代码如下所示:
定义(
函数(要求){)
var =需要();
var(=);
更多的代码。
})
CMD的依赖几乎是宣言,这是由内部需要声明的
方法。但由于异步模块加载器需要加载这些模块的时间提前,所以模块需要提取所有依赖的模块才真的使用。是否立即或自动提取机提取的自动化
工具,CMD的依赖报表格式只能通过静态分析来实现的,这是
命令的缺点。
CMD标准的弊端
它不能直接
压缩:需求是局部变量,这意味着它不能被压缩工具直接压缩。如果需要
替换变量,加载器和自动化工具将无法获得模块依赖项。
在模块编写中还有额外的约定:
路径参数不能是字符串
操作,不能替换变量。否则,加载器和自动化工具无法
正确提取路径。
规范以外的约定意味着更多的
文档,除非它们是规范的一部分。
注:本seajs静态分析的实现是依靠的需要部分的模块封装后定期提取模块toString()的路径。
AMD
AMD模块依赖声明模式:
复制代码代码如下所示:
定义{、、函数(A、B){
更多的代码。
})
AMD的依赖性是早期声明,这种优势是不需要依靠静态分析来获益的,无论是装载机还是依靠自动化工具都可以非常直接,标准定义可以更加简单,意味着可以实现更强大的
功能,这有利于装载机和自动分析工具。
AMD标准的弊端
依赖早期声明在编写代码时不那么友好。
有内部模块与模块之间有一定差异,Nodejs。
问题二点需要解释的是,事实上,无论CMD或AMD异步模块,它不能与
同步模块的规格一致(NodeJS模块),只有谁更像是同步module.amd必须
转换为同步模块。除了
删除定义函数的包外,它还需要使用请求在头部声明依赖关系语句。CMD只需要删除定义函数的包。
总结
从标准的角度来看,AMD是更简单和严格的,其适用范围更广。requirejs的推动下,它实际上已成为异步模块的标准在国外,和各类图书馆先后
支持AMD规范。
但SeaJS和CMD做了很多好东西:
1、相对自然的依赖声明样式
2、小而美的内部实现
3、贴心的外设功能设计
4,更好的中国社区支持
如果可能的话,我想看看seajs支持AMD,这是前端社区终极幸福。