宝哥软件园

SeaJS和RequireJS之间的差异比较

编辑:宝哥软件园 来源:互联网 时间:2021-09-09

“历史不是过去,历史是打过去的。随着W3C等规范和浏览器的快速发展,前端模块化开发将逐渐成为基础设施。一切终究会成为历史,未来会更好。”——引用于波原文最后一段,我个人非常赞同。既然说到“未来”,我个人认为如果前端js模块继续发展,其模块格式很可能会成为未来WEB的标准规范,并产生多种实现方式。就像JSON格式一样,它最终成为标准,并由浏览器本机实现。

未来谁更有可能成为异步模块标准?SeaJS遵循CMD规范,RequireJS遵循AMD规范,从这两种不同的格式开始。

煤矿管理局

CMD模块取决于声明模式:

复制代码如下: define(function(require){ var a=require('。/a ');var b=必需('。/b’;//更多代码.})

CMD依赖关系在附近声明,由内部require方法声明。但是,由于是异步模块,加载器需要提前加载这些模块,所以在模块实际使用之前,需要提取模块中的所有依赖关系。无论是加载器立即提取还是自动化工具提前提取,CMD的这种依赖声明格式只能通过静态分析来实现,这是CMD的缺点。

CMD规范的弊端

不能直接压缩:require是局部变量,也就是说不能被压缩工具直接压缩。如果替换了require变量,加载器和自动化工具就无法获得模块的依赖性。模块编写中还有其他约定:路径参数不能用字符串操作,也不能用变量替换,否则加载器和自动化工具无法正确提取路径。规范之外的约定意味着更多的文档,除非它们也是规范的一部分。

注意:SeaJS静态分析是通过使用模块包toString()的require部分获取依赖模块路径来实现的。

超微半导体公司

AMD模块依赖声明模式:

复制代码如下:define ([)。/a ','。/b'],函数(a,b) {//morecode.})

AMD依靠提前申报。这个优势的好处是依赖关系不需要静态分析,加载器和自动化工具都可以直接获取依赖关系。规范的定义可以更简单,这意味着可以产生更强大的实现,这有利于加载器和自动化分析工具。

AMD规格的缺点

依赖早期声明在代码编写中并不那么友好。模块内部的模块和NodeJS的模块有一些区别。第二个问题需要特别说明。事实上,无论是CMD还是AMD的异步模块都跟不上同步模块规范(NodeJS的Modules),只有谁比谁都更像同步模块。为了将AMD转换成同步模块,AMD需要在头部使用require来声明依赖关系,而CMD只需要移除define函数的包。

摘要

在规格上,AMD更简单严谨,适用性更广。随着RequireJS的大力推广,AMD几乎成为了国外事实上的异步模块标准,各大类库都先后支持AMD规范。

但是从SeaJS和CMD来看,他们也做了很多好事:

1.相对自然的依赖声明风格2。小而美的内在实现3。贴心的周边功能设计4。更好的华人社区支持

如果可能的话,希望看到SeaJS也支持AMD,这和前端社区环境是一致的,最终广大开发者都是开心的。

更多资讯
游戏推荐
更多+