是否有人将Coffeescript用于生产应用程序?[关闭]


94

Coffeescript看起来很酷。有人用过吗?它的优点和缺点是什么?


Answers:


113

我们已经开始在我们的产品中使用CoffeeScript-一个非公开的网站,基本上是一个用于浏览某些类型数据的应用程序。我们将CoffeeScript用作命令行编译器(而不是在服务器上,我们最终希望这样做)。

优点(对我们而言):

  • 它消除了javascript中很多不必要的混乱(例如花括号,分号,一些括号),其程度是使代码比javascript更加清晰易懂
  • 比javascript少20-30%的代码行(可做完全相同的事情)
  • CoffeeScript不仅可以消除噪音,还可以添加关键字,类和诸如heredocs之类的功能,以使编码更整洁,更有趣
  • 鉴于上述要点,一旦学习了绳索,无疑可以更快地在CoffeeScript中进行编码

缺点

  • 使用命令行编译器:进行调试时,解决问题(javascript)时与编写修订(咖啡脚本)时,您正在查找不同的代码。但是,令人难以置信的是,我们的CoffeeScript非常出色,我们几乎不需要调试它!

重要的是,我们可以随时回头。我们的coffeescript编译器只是生成可读的javascript,因此,如果任何人改变了主意或无法弄清某些内容,那么我们就可以退回到使用coffeescript生成的javascript并保持编码。


1
PandaWood在所有方面都做到了正确。今年以来,我一直在为所有客户的生产环境中使用它,并取得了巨大的成功。我们将Buildr用作编译器,因为它支持将coffeescript和javascript文件捆绑为一个。github.com/balupton/buildr.npm
balupton

13
“我们的CoffeeScript非常强大,我们不需要调试它!” 嗯...真的吗?您的数据总是符合您的期望吗?您从来没有遇到过意外情况this,或者向函数发送了错误的类型?如果您不必“调试任何东西”,我认为您还没有做任何有趣的事情。
瑞安·弗洛伦斯

8
@rpflo,如果您会注意到“我们已开始使用Coffeescript ...”字样,并将其与令人反感的声明相匹配,并在给出该声明的轻松环境中使用它-我想任何人都可以同意,几乎不需要担心。根据我所提供的文字,很可能我们只是将已经正常工作的javascript转换为coffeescript,因此不需要进行认真的调试
PandaWood 2012年

3
关于Con',现在使用Source-Maps不再是问题,只需编译即可,-m一切都很好。
omeid 2013年

@omeid好点。我对此进行了跟进,并成功在Chrome中使用coffeescript
编写

27

对于BusyConf中的所有 JavaScript,我们都使用coffeescript。BusyConf的很大一部分是在浏览器中运行的客户端应用程序,其中包括对脱机模式的支持。

我们所有的coffeescript代码都经过了全面测试。测试本身是用coffeescript编写的,并使用Qunit框架(用javascript编写)。我们还为Qunit框架编写了一个扩展,使测试变得更好。Qunit扩展是用CoffeeScript编写的。我们的应用程序具有使用CoffeeScript编写的移动版本,并使用Sencha Touch框架(使用javascript编写)。

这样做的好处是,您可以在应用程序中自由地混合javascript依赖关系,但是您编写的所有代码(您的应用程序代码,测试等)都可以(而且应该是!)是coffeescript。


24

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

  1. Ruby on Rails 3.1包含了官方的CoffeeScript支持,这意味着它将在现实世界中得到更多使用。上个月,我在RailsConf上发表了一个演讲,在此之前,大多数与会者都没有听说过CoffeeScript,并且由于dhh的大力支持,他们很想参加。
  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结合使用,以创建iPhone / Android应用程序。(Changelog的Wynn Netherland通过将CoffeeScript描述为“我的iOS,Android和WebOS移动开发的秘密武器”来模糊我的书),但是在生产Rails应用程序中将会有更多的用途,并且,我希望在其他地方,在未来的几个月中。



10

这些天我真的很喜欢Coffeescript。本质上,整个HotelTonight iPhone应用程序都写在其中(使用Appcelerator Titanium,它使您可以用JavaScript编写“本机”应用程序-它们不是Web应用程序,例如Phonegap)。在这种情况下,我选择使用Coffeescript,因为它使组织和维护大量JS变得容易得多。我还发现用Coffeescript(与JavaScript)编写代码更令人愉悦。我们还在Rails应用程序中将Coffeescript用于JS,但是相对于整个电话应用程序来说,这是非常少的代码。

专业人士大多只不过是一个更好的语法,而且还标准化了OO机制,然后添加了一些不错的添加项(列表理解,某些作用域等)。

缺点对我来说几乎为零。最主要的是它是调试的额外一层。您将需要查看生成的JS(非常易读且不错),然后将其映射到Coffeescript代码。对我们来说,这根本不是问题,但是YMMV。

最后,我的看法是,在生产应用程序上使用它的风险为零,因此,不要让它成为阻碍者。然后,尝试一下。用它编写一些代码,将其与您在JS中编写的代码进行比较,查看生成的代码,以查看您是否满意阅读这些内容以进行调试。另外,在#coffeescript IRC中闲逛,那里的人很好。最后,看看它如何与您的应用程序集成,例如您的“构建”过程是什么(例如,对于Rails,尝试Barista,独立运行,只需使用随附的“ coffee -w”等)。


3

Coffeescript确实确实使编写JS更容易。您最终得到了更干净,更高效的代码。

话虽如此,您仍然只能在Vanilla JS中做任何事情。一旦使用了足够的coffeescript,编写(好的)JS变得容易得多。

因此,如果您没有大量使用JS,建议您改用coffescript。您将获得更好,更干净,错误更少的代码。如果您确实精通JS,那么在“真实”应用程序上开始使用coffeescript可能不是一个好主意。

(此外,coffeescript让我有点恼火,因为它似乎鼓励使用相当“繁琐”的代码。我不知道这是好事还是坏事,但这似乎是TMTOWTDI的极端情况)


25
我不同意关于学习coffeescript而不是javascript的建议,并且不同意曾经精通javascript学习/使用coffeescript的想法也不有价值。了解javascript是Web开发人员的基础。了解您的coffeescript代码将生成的javascript是必要的。对于那些已经是javascript大师的人来说,coffeescript将是一个神奇而革命性的设备er工具。
Jim Garvin

3
@吉姆·加文(Jim Garvin),同意。人们学习他们的JavaScript很重要,我还要说,无论如何,在javascript之前学习咖啡脚本可能是不可能的,因为初学者的所有资源都将用老式的js编写(除非Rick Olsen突然决定开始发布一些在他的博客上开始JS教程)。
Daniel Mendel 2010年

2
您还需要了解Javascript才能编写Coffeescript。这样就可以在出现问题时调试代码。
布莱斯(Blaise)

更新:CoffeeScript现在具有足够的文档,并且源映射使调试JS代码变得不必要。如今,JavaScript只是目标。学习JS仍然非常有用,但是初学者可以在不了解任何JavaScript的情况下学习足够的CoffeeScript来开始编码。
卡尔·史密斯

3

请注意,尽管有一个编译器,但是由于JavaScript的动态特性,您不会得到静态检查。如常见问题解答中所述:

静态分析

CoffeeScript使用直接的源到源编译器。不执行任何类型检查,即使变量不存在也无法确定。这意味着如果不进行昂贵的运行时检查,我们将无法实现其他语言可以在本机中构建的功能。结果,将不会考虑依赖于这种分析的任何功能。

IDE支持不如JavaScript成熟(Cloud9具有语法突出显示支持,但是Eclipse JSDT具有重构功能等等):https : //stackoverflow.com/questions/4084167/ide-or-its-add-in-for-coffescript -编程

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.