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 · 27 comments

Comments

Projects
None yet
@lifesinger
Member

lifesinger commented Jul 11, 2012

相同之处

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

This comment has been minimized.

Show comment
Hide comment
@lifesinger

lifesinger Jul 11, 2012

Member

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

Member

lifesinger commented Jul 11, 2012

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

@ufologist

This comment has been minimized.

Show comment
Hide comment
@ufologist

ufologist Jun 20, 2013

SeaJS与RequireJS最大的区别

执行模块的机制大不一样

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

SeaJS与RequireJS最大的区别

执行模块的机制大不一样

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

@lifesinger

This comment has been minimized.

Show comment
Hide comment
@lifesinger

lifesinger Jun 21, 2013

Member

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

Member

lifesinger commented Jun 21, 2013

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

@wxg315699

This comment has been minimized.

Show comment
Hide comment
@wxg315699

wxg315699 Feb 18, 2014

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

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

@binggg

This comment has been minimized.

Show comment
Hide comment
@binggg

binggg Jun 4, 2014

as lazy as possible

binggg commented Jun 4, 2014

as lazy as possible

@zhishaofei3

This comment has been minimized.

Show comment
Hide comment
@zhishaofei3

zhishaofei3 Jun 7, 2014

nocache、debug 在哪找啊?

nocache、debug 在哪找啊?

@afc163

This comment has been minimized.

Show comment
Hide comment
@zhishaofei3

This comment has been minimized.

Show comment
Hide comment

@afc163 谢谢

@mycoin

This comment has been minimized.

Show comment
Hide comment
@mycoin

mycoin Jun 13, 2014

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

mycoin commented Jun 13, 2014

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

@army8735

This comment has been minimized.

Show comment
Hide comment
@army8735

army8735 Jun 13, 2014

Member

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

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

Member

army8735 commented Jun 13, 2014

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

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

@mycoin

This comment has been minimized.

Show comment
Hide comment
@mycoin

mycoin Jun 13, 2014

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

个人感觉这样才Common

mycoin commented Jun 13, 2014

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

个人感觉这样才Common

@army8735

This comment has been minimized.

Show comment
Hide comment
@army8735

army8735 Jun 13, 2014

Member

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

Member

army8735 commented Jun 13, 2014

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

@army8735

This comment has been minimized.

Show comment
Hide comment
@army8735

army8735 Jun 13, 2014

Member

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

Member

army8735 commented Jun 13, 2014

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

@afc163

This comment has been minimized.

Show comment
Hide comment
@afc163

afc163 Jun 13, 2014

Member

没有意义。。。

Member

afc163 commented Jun 13, 2014

没有意义。。。

@lifesinger

This comment has been minimized.

Show comment
Hide comment
@lifesinger

lifesinger Jun 13, 2014

Member

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

Member

lifesinger commented Jun 13, 2014

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

@ysmood

This comment has been minimized.

Show comment
Hide comment
@ysmood

ysmood Jun 21, 2014

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

ysmood commented Jun 21, 2014

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

@see365

This comment has been minimized.

Show comment
Hide comment
@see365

see365 Sep 3, 2014

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

see365 commented Sep 3, 2014

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

@Galen-Yip

This comment has been minimized.

Show comment
Hide comment
@Galen-Yip

Galen-Yip Jan 4, 2015

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

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

@terranc

This comment has been minimized.

Show comment
Hide comment
@terranc

terranc Feb 10, 2015

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

terranc commented Feb 10, 2015

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

@afc163

This comment has been minimized.

Show comment
Hide comment
@afc163

afc163 Feb 10, 2015

Member

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

Member

afc163 commented Feb 10, 2015

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

@ysmood

This comment has been minimized.

Show comment
Hide comment
@ysmood

ysmood Feb 11, 2015

@afc163 大概是在黑这个 po 吧

ysmood commented Feb 11, 2015

@afc163 大概是在黑这个 po 吧

@lucifercha

This comment has been minimized.

Show comment
Hide comment
@lucifercha

lucifercha Jul 11, 2015

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

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

@adhehe

This comment has been minimized.

Show comment
Hide comment
@adhehe

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

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

This comment has been minimized.

Show comment
Hide comment
@pecker

pecker Sep 1, 2015

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

pecker commented Sep 1, 2015

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

@DarrenMan

This comment has been minimized.

Show comment
Hide comment
@DarrenMan

DarrenMan Mar 1, 2016

视自己需求而定吧

视自己需求而定吧

@yolynn-bird

This comment has been minimized.

Show comment
Hide comment
@yolynn-bird

yolynn-bird Nov 13, 2016

能否结合ES6再来对比下呢

能否结合ES6再来对比下呢

@mygaochunming

This comment has been minimized.

Show comment
Hide comment
@mygaochunming

mygaochunming May 12, 2017

@lifesinger

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

@lifesinger

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

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