现有的JavaScript框架是否会合并CommonJS?

现有的JavaScript框架是否会合并CommonJS?,javascript,jquery,yui,mootools,commonjs,Javascript,Jquery,Yui,Mootools,Commonjs,Prototype、jQuery、YUI、MooTools、Dojo等JavaScript框架似乎都是以客户端开发人员为目标的,其重点是更高效地实现常见的用户交互模式,并使用更少的代码 随着服务器端JavaScript的出现,这些框架是否打算合并CommonJS标准,以便为服务器端JavaScript重用其库函数,还是允许Node和Narhall等替代框架处理服务器端用例 (我意识到这个问题非常接近于一个可以讨论但无法回答的问题,但我认为Stack Overflow社区实际上可以通过特定的引用来

Prototype、jQuery、YUI、MooTools、Dojo等JavaScript框架似乎都是以客户端开发人员为目标的,其重点是更高效地实现常见的用户交互模式,并使用更少的代码

随着服务器端JavaScript的出现,这些框架是否打算合并CommonJS标准,以便为服务器端JavaScript重用其库函数,还是允许Node和Narhall等替代框架处理服务器端用例


(我意识到这个问题非常接近于一个可以讨论但无法回答的问题,但我认为Stack Overflow社区实际上可以通过特定的引用来回答这个问题。)

因为大多数库都专门针对DOM,旨在简化浏览器API和跨浏览器问题,我不确定这会带来什么好处

jQuery 1.4中不需要CommonJS支持。它也不在地图上

Dojo确实努力做到更全面,并且有一个问题有待解决,但它被标记为未来


一般来说,我不会指望它。

就像大家已经说过的,大多数JavaScript库在很大程度上都是DOM上的包装器


不过,我不会只考虑服务器端的通用JS。我认为它在客户端会有一席之地,特别是当Javascript向改进的安全模型发展时,它将从CommonJS的模块化方法中受益匪浅。

大多数CommonJS API都是面向服务器的功能,您根本无法在浏览器JS中实现。在当前的模块中,
io
fs
system
sockets
worker
加上JSGI等模块的基本性质是无法实现的

编码
需要大量的数据表,而这些数据表是您不想构建到库中的(基本的内置编码除外,您已经可以很好地处理了)。无法支持其他功能,因为它们需要诸如getter/setter之类的语言功能,但由于支持不足,这些功能还不能在浏览器中使用


所有这些折扣,我不确定是否真的有什么剩余。
需要
管道?

我对CommonJS的看法是,我们希望能够使模块成为运行客户端和服务器端的大型系统的一部分。我个人已经使用过两种不同的客户端CommonJS模块加载器,它工作得很好

在浏览器中,您可以使用任何您想要的DOM操纵库/客户端工具包,而这实际上不会影响从服务器重用CommonJS模块的能力

在服务器上重用客户端实用程序实际上仍然可以工作。CommonJS模块都在闭包中运行它们的代码,因此每个模块都是独立于其他模块的。基于浏览器的库倾向于使用全局填充的名称空间。到目前为止,服务器上的每个CommonJS平台仍然可以以这样或那样的方式使用globals


只要库本身能够支持没有DOM的环境(如Rhino),就应该能够使它在典型的SSJS环境中工作,尽管不在CommonJS模块中。

我找不到源代码,但我听说jQuery 1.4将所有插件打包为CommonJS包()。这并不意味着它们都是通用的JS模块,但这是朝着正确方向迈出的一步,表明事情正在朝着这个方向发展

有一个独角鲸软件包实现了原型的一个子集:。它还可以在其他SSJS平台上运行

Dojo Trac上有一个添加CommonJS模块支持的问题:

拥有Bespin和MobileMe的SproutCore框架也将支持CommonJS:,而卡布奇诺的制造商280 North则雇佣了一些主要的独角鲸开发者


因此,在不同的框架之间以及在客户端和服务器之间仍然存在大量的碎片,但是现在还为时过早,事情正在朝着正确的方向发展。我预测在将来的某个时候,所有主要的JS框架都会在客户端、服务器或两者上提供一些CommonJS支持。

当您谈论*非*浏览器GUI应用程序时,可以将CommonJS与DOM一起使用,因为在这些应用程序中,操作系统访问不需要受到限制。例如,这对于使用开发应用程序非常有用

简单更新一下,期待已久的(呃,传说中的)mootools 2.0,又名milk,又名prime(目前的姓氏)似乎已经转移到CJS

这并不是说它将保持不变,mootools 2.0的第一次迭代大约是在2年前

以下是我的看法(我是YUI开发人员):

你的问题似乎有两个角度

一个是关于模块打包和重用格式(CommonJS),另一个是关于客户端JS库的一般思想及其对服务器端开发的适用性

除了说YUI 3从第一天起就固有地使用一个正式的模块系统来封装和交付代码,而且它是其设计中不可或缺的一部分之外,我并不是回答打包问题的合适人选。我们一直在讨论提供适配器或构建步骤来将这些模块交付/转换为CommonJS。YUI社区中参与这一领域的其他人可能有更多有价值的信息可在此添加

在第二个角度,我可以告诉您,服务器是YUI的一级目标环境。它在服务器和客户端上同样适用。当然,有一组模块只在一个或另一个环境中有意义,但是库的很大一部分可以在围栏的两侧使用,这是不可取的