有没有人使用Coffeescript生产应用程序?

咖啡标记看起来很酷。 有没有人用过它? 有哪些优点和缺点?

我们已经开始在我们的产品中使用CoffeeScript – 一个面向非公众的网站,它基本上是一个浏览特定types数据的应用程序。 我们使用CoffeeScript作为命令行编译器(不在服务器上,我们最终希望这样做)。

PROS (对我们而言):

  • 它在javascript(例如括号,分号,括号)中摆脱了许多不必要的混乱,以至于代码更清晰,更易于理解
  • 比JavaScriptless20-30%的代码行(做同样的事情)
  • CoffeeScript不仅可以消除噪音,还可以添加关键字,类和像heredocs这样的function,使编码变得更清洁,更有趣
  • 鉴于以前的观点,一旦你学习了绳索,在CoffeeScript中编码毫无疑问更快

缺点

  • 使用命令行编译器时:debugging时,在编写修订(coffeescript)时解决问题(javascript)时会查看不同的代码。 然而,有些令人难以置信的是,我们的CoffeeScript非常棒,我们从来不需要debugging它!

重要的是,我们可以随时回头。 我们的coffeescript编译器只是生成可读的javascript,所以如果任何人改变了主意,或者无法弄清楚什么,那么我们可以放弃使用coffeescript生成的javascript,并保持编码。

我们在BusyConf中为所有的javascript使用coffeescript 。 BusyConf的大部分是在浏览器中运行的客户端应用程序,包括对离线模式的支持。

我们所有的咖啡代码都经过了全面testing。 testing本身是用coffeescript编写的,并使用Qunit框架(用javascript编写)。 我们还写了一个扩展到Qunit框架,使testing更好。 Qunit扩展是用CoffeeScript编写的。 我们的应用程序有一个在CoffeeScript中编写的移动版本,它使用Sencha Touch框架(用JavaScript编写)。

从中可以看出,你可以在你的应用程序中自由混用JavaScript依赖,但是你所写的所有代码(你的应用程序代码,testing等等)都可以(也应该)成为coffeescript。

差不多一年之后,值得发布一些更新:

  1. Ruby on Rails 3.1结合了官方的CoffeeScript支持,这意味着它将会看到更多的真实世界的使用。 上个月,我在RailsConf上发表了一个演讲,大多数与会者之前都没有听说过CoffeeScript,因为他强烈的赞同 – 都渴望进入。
  2. 有一本关于CoffeeScript的书,目前在电子书中,很快将由The Pragmatic Bookshelf出版。 这就是所谓的CoffeeScript:加速JavaScript开发 ,这是由你真正的。 它基于CoffeeScript 1.1.1。
  3. 在1.0和1.1.1之间的六个月里,这个语言实际上已经变化很小了; 几乎所有的变化都被认为是“错误修正”。 为了从1.0.1到1.1.1的过渡,我不得不对本书中的代码进行微调。 不过,我相信这种语言在将来会看到更大的变化。

CoffeeScript项目的最权威列表位于CoffeeScript wiki的“野外”页面上。

我想说的是,到目前为止,CoffeeScript的大部分生产用途都是和Appcelerator一起来创buildiPhone / Android应用程序。 (The Changelog的Wynn Netherland通过将CoffeeScript描述为“我对iOS,Android和WebOS移动开发的秘密武器”来模糊了我的书),但是生产Rails应用程序将会有更多的用处,我希望在其他地方,在未来几个月。

这些天我真的很喜欢咖啡书。 实际上,整个HotelTonight iPhone应用程序都是用它编写的(使用Appcelerator Titanium,它可以让你在JavaScript中编写“原生”应用程序 – 它们不是networking应用程序,就像Phonegap一样)。 在这种情况下,我select使用Coffeescript是因为它使组织和维护大量的JS变得更容易。 我也发现,使用Coffeescript(与JavaScript)编写代码简单得多。 我们也在我们的Rails应用程序中使用Coffeescript作为JS,但是这相对于整个手机应用程序来说是非常小的/less量的代码。

专业人员大多只是做一个更好的语法,而且它规范了一个面向对象的机制,然后添加一些很好的补充(列表parsing,一些范围的东西等)。

缺点对我来说几乎为零。 主要的是它是一个额外的层面进行debugging。 你将需要看生成的JS(这是非常可读和很好),然后将其映射到您的Coffeescript代码。 对我们来说,这根本不是问题,而是YMMV。

最后,我认为,在生产应用程序中使用它的风险是零,所以,不要让它成为阻碍。 然后,去试试看。 用它写一些代码,比较一下你在JS中编写的代码,看看生成的代码,看看你是否能够读取debugging需要的内容。 另外,在#coffeescript IRC中闲逛,人们都很好。 最后,看看它将如何与您的应用程序集成,例如什么是您的“构build”过程(例如,对于Rails,尝试Barista,单独的东西,只使用包含的“咖啡-w”等)。

Coffeescript真的只是使写JS更容易。 你最终得到更清洁,更有效的代码。

话虽如此,你仍然只能做任何你能做的香草JS。 一旦你足够使用咖啡标记,写JS(好)就变得容易多了。

所以如果你还没有使用JS一吨,我build议学习coffescript。 你会变得更好,更干净,更lessbug的代码。 如果你已经很熟练地使用JS,那么在“真实”的应用程序上开始使用coffeescript可能不是一个好主意。

(另外,coffeescript会让我感到有点不舒服,因为它似乎鼓励了一些“浮躁”的代码,我不知道它是好事还是坏事,但是TMTOWTDI似乎是一个极端的例子)

请注意,尽pipe有一个编译器,但由于JavaScript的dynamic特性,您不会得到静态检查。 正如FAQ中所写:

静态分析

CoffeeScript使用直接的源到源编译器。 没有进行types检查,如果一个variables存在或不存在,我们也无法解决。 这意味着我们无法实现其他语言可以在本地生成的function,而无需进行昂贵的运行时检查。 因此,任何依赖这种分析的特征都不会被考虑。

IDE支持不如JavaScript那么成熟(Cloud9支持语法高亮,但Eclipse JSDT有重构和更多): https : //stackoverflow.com/questions/4084167/ide-or-its-add-in-for-coffescript -programming