Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

与 RequireJS 的异同 #277

Closed
lifesinger opened this issue Jul 11, 2012 · 30 comments
Closed

与 RequireJS 的异同 #277

lifesinger opened this issue Jul 11, 2012 · 30 comments
Milestone

Comments

@lifesinger
Copy link
Member

相同之处

RequireJS 和 Sea.js 都是模块加载器,倡导模块化开发理念,核心价值是让 JavaScript 的模块化开发变得简单自然。

不同之处

两者的主要区别如下:

  1. 定位有差异。RequireJS 想成为浏览器端的模块加载器,同时也想成为 Rhino / Node 等环境的模块加载器。Sea.js 则专注于 Web 浏览器端,同时通过 Node 扩展的方式可以很方便跑在 Node 环境中。
  2. 遵循的规范不同。RequireJS 遵循 AMD(异步模块定义)规范,Sea.js 遵循 CMD (通用模块定义)规范。规范的不同,导致了两者 API 不同。Sea.js 更贴近 CommonJS Modules/1.1 和 Node Modules 规范。
  3. 推广理念有差异。RequireJS 在尝试让第三方类库修改自身来支持 RequireJS,目前只有少数社区采纳。Sea.js 不强推,采用自主封装的方式来“海纳百川”,目前已有较成熟的封装策略。
  4. 对开发调试的支持有差异。Sea.js 非常关注代码的开发调试,有 nocache、debug 等用于调试的插件。RequireJS 无这方面的明显支持。
  5. 插件机制不同。RequireJS 采取的是在源码中预留接口的形式,插件类型比较单一。Sea.js 采取的是通用事件机制,插件类型更丰富。

还有不少差异,涉及具体使用方式和源码实现,欢迎有兴趣者研究并发表看法。

总之,如果说 RequireJS 是 Prototype 类库的话,则 Sea.js 致力于成为 jQuery 类库。

最重要的

最后,向 RequireJS 致敬!RequireJS 和 Sea.js 是好兄弟,一起努力推广模块化开发思想,这才是最重要的。

更新

参考

@lifesinger
Copy link
Member Author

有任何问题,欢迎留言交流。
注意:已解决的问题,会在整理后删除掉。

@ufologist
Copy link

SeaJS与RequireJS最大的区别

执行模块的机制大不一样

SeaJS对模块的态度是懒执行, 而RequireJS对模块的态度是预执行

@lifesinger
Copy link
Member Author

@ufologist 嗯,推荐的文章真好,图文并茂。

@wxg315699
Copy link

推荐的图文并茂的文章有坑啊,现象确实是那么个现象,可是结论。。。实在不敢恭维

@binggg
Copy link

binggg commented Jun 4, 2014

as lazy as possible

@zhishaofei3
Copy link

nocache、debug 在哪找啊?

@afc163
Copy link
Member

afc163 commented Jun 7, 2014

@zhishaofei3
Copy link

@afc163 谢谢

@mycoin
Copy link

mycoin commented Jun 13, 2014

习惯使用 require.config配置, 并且只有两个命名空间的Loader,个人性格问题~

@army8735
Copy link
Member

@mycoin
两个命名空间是指?require和define?
seajs也是2个:seajs和define。

习惯问题的话其实简单:var require = seajs;delete seajs

@mycoin
Copy link

mycoin commented Jun 13, 2014

@army8735 对的,因为使用标准的 require, define 可以在requireJS, esl, 等随意切换,这样也使得我的模块可以被所有类型的loader使用。

个人感觉这样才Common

@army8735
Copy link
Member

嗯,这个理由很有说服力,玉伯当时设计的目的就是为了区分seajs.use和require的区别。
两边都有道理。
或许可以fork个分支……

@army8735
Copy link
Member

@lifesinger 开个新库fork过来,requirejs风格的seajs如何?

@afc163
Copy link
Member

afc163 commented Jun 13, 2014

没有意义。。。

@lifesinger
Copy link
Member Author

不要,没意义
requirejs 的 require 有全局和参数之分,容易混淆,社区里就有人吐槽,不好

@ysmood
Copy link

ysmood commented Jun 21, 2014

@lifesinger 第 3 条差异具体是什么意思?“三方类库” 是指 jquery 这样的类库吗?seajs 不一样需要 jquery 更改源码来接入吗?“自主封装” 具体是怎样的过程呢,求文档~

1 similar comment
@see365
Copy link

see365 commented Sep 3, 2014

@lifesinger 第 3 条差异具体是什么意思?“三方类库” 是指 jquery 这样的类库吗?seajs 不一样需要 jquery 更改源码来接入吗?“自主封装” 具体是怎样的过程呢,求文档~

@Galen-Yip
Copy link

玉伯大大 我看了推荐文章里面关于seajs按需执行这块 当初这一功能设计成这样一定是支付宝场景所需 能不能举一个大体的例子,

@terranc
Copy link

terranc commented Feb 10, 2015

@lifesinger 第 3 条差异具体是什么意思?“三方类库” 是指 jquery 这样的类库吗?seajs 不一样需要 jquery 更改源码来接入吗?“自主封装” 具体是怎样的过程呢,求文档~

@afc163
Copy link
Member

afc163 commented Feb 10, 2015

github 还有机器人水军的...?

@ysmood
Copy link

ysmood commented Feb 11, 2015

@afc163 大概是在黑这个 po 吧

@ciys
Copy link

ciys commented Jul 11, 2015

seajs要使用的模块都必须是cmd规范的,以前项目中要使用的代码都需要改变成cmd规范看起来好复杂,有没有什么好办法解决这个问题的

@adhehe
Copy link

adhehe commented Jul 11, 2015

还好吧,大多数常用的插件都有相关的CMD和AMD规范的源码,真没有的话自己稍改就行了,如果真想简单点,就用requirejs吧,里面有个shim: 为那些没有使用define()来声明依赖关系、设置模块的"浏览器全局变量注入"型脚本做依赖和导出配置。

在 2015-07-11 11:08:29,"lucifercha" notifications@github.com 写道:

seajs要使用的模块都必须是cmd规范的,以前项目中要使用的代码都需要改变成cmd规范看起来好复杂,有没有什么好办法解决这个问题的


Reply to this email directly or view it on GitHub.

@pecker
Copy link

pecker commented Sep 1, 2015

不错,就像java和.net的不同规范语言一样

@DarrenMan
Copy link

视自己需求而定吧

@pinkski
Copy link

pinkski commented Nov 13, 2016

能否结合ES6再来对比下呢

@mygaochunming
Copy link

@lifesinger

从 RequireJS 到 Sea.js 系列:1~3打不开,是文章地址修改了吗?希望能够拜读一下

@dhlolo
Copy link

dhlolo commented Sep 15, 2022

用CMD同步的思路去处理异步问题:

  • lazy import使脚本模块复杂时效率方面得不到保证
  • 把setTimeout内部的代码认为需要符合同步顺序似乎也没啥好处
  • 倒是对于开发者节省了麻烦

@summerhll
Copy link

summerhll commented Sep 15, 2022 via email

@gt333
Copy link

gt333 commented Sep 15, 2022 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests