Hat jemand Coffeescript für eine Produktionsanwendung verwendet? [geschlossen]

94

Coffeescript sieht ziemlich cool aus. Hat es jemand benutzt? Was sind die Vor- und Nachteile?

Esteban Araya
quelle
Siehe auch
Trevor Burnham

Antworten:

113

Wir haben begonnen, CoffeeScript in unserem Produkt zu verwenden - einer nicht öffentlich zugänglichen Website, die im Grunde eine App zum Durchsuchen bestimmter Arten von Daten ist. Wir verwenden CoffeeScript als Befehlszeilen-Compiler (nicht auf dem Server, was wir eventuell tun möchten).

PROS (für uns):

  • Es beseitigt eine Menge unnötiger Unordnung in Javascript (z. B. geschweifte Klammern, Semikolons, einige Klammern), sofern der Code sauberer und auf einen Blick leichter zu verstehen ist als Javascript
  • 20-30% weniger Codezeilen als Javascript (um genau das Gleiche zu tun)
  • CoffeeScript entfernt nicht nur Rauschen, sondern fügt auch Schlüsselwörter, Klassen und Funktionen wie Heredocs hinzu, um das Codieren sauberer und angenehmer zu gestalten
  • In Anbetracht der vorherigen Punkte ist es zweifellos schneller, in CoffeeScript zu codieren, sobald Sie die Seile gelernt haben

Nachteile

  • Wenn Sie den Befehlszeilen-Compiler verwenden: Zum Debuggen sehen Sie beim Lösen des Problems (Javascript) einen anderen Code als beim Schreiben des Fixes (Coffeescript). Unglaublicherweise ist unser CoffeeScript jedoch so großartig, dass wir es nie debuggen mussten!

Wichtig ist, dass wir jederzeit zurückkehren können. Unser Coffeescript-Compiler produziert nur lesbares Javascript. Wenn also jemand seine Meinung ändert oder etwas nicht herausfinden kann, können wir einfach wieder das von Coffeescript produzierte Javascript verwenden - und weiterhin codieren.

PandaWood
quelle
1
PandaWood trifft es in allen Punkten. Ich habe es dieses Jahr für alle meine Kunden mit großem Erfolg in der Produktion eingesetzt. Wir verwenden Buildr als Compiler, da es das Bündeln von Coffeescript- und Javascript-Dateien in einer unterstützt. github.com/balupton/buildr.npm
balupton
13
"Unser CoffeeScript ist so großartig, dass wir es nie debuggen mussten!" Ehh ... wirklich? Ihre Daten entsprechen immer Ihren Erwartungen? Sie hatten noch nie ein Unerwartetes thisoder haben den falschen Typ an eine Funktion gesendet? Ich glaube, Sie haben noch nichts Interessantes getan, wenn Sie nichts "debuggen" mussten.
Ryan Florence
8
@rpflo, wenn Sie die Worte "Wir haben begonnen, Coffeescript zu verwenden ..." bemerken und diese mit der beleidigenden Aussage in Einklang bringen und sie in den unbeschwerten Kontext stellen, in dem sie gegeben wird - ich denke, jeder könnte zustimmen , dass es wenig Anlass zur Sorge gibt. Aus dem Text, den ich gegeben habe, ist es sehr wahrscheinlich, dass wir bereits funktionierendes Javascript einfach in Coffeescript konvertiert haben, daher ist noch kein ernsthaftes Debugging erforderlich
PandaWood
3
Über die Con ', jetzt mit Source-Maps, die eigentlich kein Problem mehr sind, kompiliere einfach mit -mund du bist gut.
Omeid
@omeid guter Punkt. Ich habe das weiterverfolgt und erfolgreich Quellkarten in Chrome mit Coffeescript arbeiten lassen
PandaWood
27

Wir verwenden Coffeescript für das gesamte Javascript in BusyConf . Ein großer Teil von BusyConf ist eine clientseitige Anwendung, die in Browers ausgeführt wird, einschließlich der Unterstützung des Offline-Modus.

Unser gesamter Coffeescript-Code ist vollständig getestet. Die Tests selbst sind in Coffeescript geschrieben und verwenden das Qunit- Framework (das in Javascript geschrieben ist). Wir haben auch eine Erweiterung des Qunit-Frameworks geschrieben, die die Tests schöner macht. Die Qunit-Erweiterung ist in CoffeeScript geschrieben . Unsere Anwendung verfügt über eine mobile Version, die in CoffeeScript geschrieben ist, und verwendet das Sencha Touch- Framework (das in Javascript geschrieben ist).

Das Ergebnis ist, dass Sie Javascript-Abhängigkeiten in Ihrer Anwendung frei mischen können, aber der gesamte Code, den Sie schreiben (Ihr Anwendungscode, Tests usw.), kann (und sollte!) Coffeescript sein.

Jim Garvin
quelle
24

Fast ein Jahr später lohnt es sich, einige Updates zu veröffentlichen:

  1. Ruby on Rails 3.1 enthält offizielle CoffeeScript-Unterstützung, was bedeutet, dass die Verwendung in der Praxis weitaus realer sein wird. Ich habe letzten Monat auf der RailsConf einen Vortrag gehalten, bei dem die meisten Teilnehmer noch nie von CoffeeScript gehört hatten und - angesichts der starken Unterstützung von dhh - unbedingt darauf eingehen wollten.
  2. Es gibt ein Buch über CoffeeScript, das derzeit im eBook erhältlich ist und bald im Pragmatic Bookshelf gedruckt wird. Es heißt CoffeeScript: Accelerated JavaScript Development und gehört Ihnen. Es basiert auf CoffeeScript 1.1.1.
  3. Die Sprache hat sich in den sechs Monaten zwischen 1.0 und 1.1.1 kaum verändert. Fast alle Änderungen gelten als "Bugfixes". Für den Übergang von 1.0.1 zu 1.1.1 musste ich nur sehr wenige Änderungen am Code im Buch vornehmen. Ich bin mir jedoch sicher, dass die Sprache in Zukunft größere Änderungen erfahren wird.

Die definitivste Liste der CoffeeScript-Projekte finden Sie auf der Seite In the Wild des CoffeeScript-Wikis .

Ich würde sagen, dass der Großteil der bisherigen Produktion von CoffeeScript in Verbindung mit Appcelerator zur Erstellung von iPhone / Android-Apps erfolgt. (Wynn Netherland von The Changelog verwischte mein Buch, indem er CoffeeScript als "meine Geheimwaffe für die mobile Entwicklung von iOS, Android und WebOS" beschrieb), aber es wird viel mehr Verwendung in Produktions-Rails-Apps geben - und ich hoffe, anderswo - in den kommenden Monaten.

Trevor Burnham
quelle
10

Ich liebe Coffeescript heutzutage wirklich. Im Wesentlichen ist die gesamte HotelTonight iPhone-Anwendung darin geschrieben (mit Appcelerator Titanium, mit dem Sie "native" Apps in JavaScript schreiben können - es handelt sich nicht um Web-Apps, beispielsweise wie Phonegap). Ich habe mich in diesem Fall für Coffeescript entschieden, da dies das Organisieren und Verwalten einer großen Menge von JS erheblich vereinfacht. Ich finde es auch viel angenehmer, Code mit Coffeescript (vs. JavaScript) zu schreiben. Wir verwenden auch Coffeescript für das JS in unserer Rails-App, aber dies ist eine unglaublich geringe Menge an Code in Bezug auf die gesamte Telefon-App.

Die Profis haben meistens damit zu tun, nur eine schönere Syntax zu sein, aber auch, dass sie einen OO-Mechanismus standardisiert und dann einige nette Ergänzungen hinzufügt (Listenverständnis, einige Umfangssachen usw.).

Die Nachteile sind für mich fast Null. Das wichtigste ist, dass es eine zusätzliche Ebene zum Debuggen ist. Sie müssen sich das generierte JS ansehen (das SEHR lesbar und nett ist) und es dann Ihrem Coffeescript-Code zuordnen. Für uns war dies überhaupt kein Problem, aber YMMV.

Letztendlich ist es meiner Meinung nach kein Risiko, es in einer Produktions-App zu verwenden. Lassen Sie sich also nicht blockieren. Dann probieren Sie es aus. Schreiben Sie einen Code damit, vergleichen Sie diesen mit dem, was Sie in JS schreiben würden, und sehen Sie sich den generierten Code an, um festzustellen, ob Sie damit vertraut sind, diesen Code für Debugging-Anforderungen lesen zu können. Hängen Sie auch im #coffeescript IRC ab, die Leute sind dort gut. Und schließlich sehen Sie, wie es sich in Ihre App integrieren lässt, z. B. was Ihr "Build" -Prozess ist (z. B. für Rails, versuchen Sie Barista, für etwas Eigenständiges, verwenden Sie einfach das mitgelieferte "Kaffee-W" usw.).

chrisrbailey
quelle
3

Coffeescript erleichtert das Schreiben von JS wirklich nur. Sie erhalten saubereren und effizienteren Code.

Davon abgesehen können Sie immer noch nur das tun, was Sie in Vanilla JS tun können. Sobald Sie genug Coffeescript verwenden, wird es viel einfacher, (gutes) JS zu schreiben.

Wenn Sie JS nicht tonnenweise verwendet haben, würde ich vorschlagen, stattdessen Coffescript zu lernen. Sie erhalten besseren, saubereren und weniger fehlerhaften Code. Wenn Sie JS bereits fließend beherrschen, ist es möglicherweise keine gute Idee, Coffeescript in einer "echten" App zu verwenden.

(Außerdem ärgert mich Coffeescript ein wenig, da es eher "floofy" Code zu fördern scheint. Ich weiß nicht, ob es eine gute oder eine schlechte Sache ist, aber es scheint ein extremer Fall von TMTOWTDI zu sein.)

Zach
quelle
25
Ich bin nicht einverstanden mit der Empfehlung, Coffeescript anstelle von Javascript zu lernen, und auch mit der Idee, dass das einmalige Erlernen / Verwenden von Coffeescript in Javascript nicht wertvoll ist. Das Verständnis von Javascript ist für Webentwickler von grundlegender Bedeutung. Es ist notwendig, das Javascript zu verstehen, das Ihr Coffeescript-Code generiert. Für diejenigen, die bereits Javascript-Meister sind, wird Coffeescript ein magisches und revolutionäres Werkzeug sein.
Jim Garvin
3
@ Jim Garvin, stimmte zu. Es ist wichtig, dass die Leute ihr Javascript lernen. Ich würde auch sagen, dass es wahrscheinlich sowieso unmöglich ist, Coffeescript vor Javascript zu lernen, da alle Ressourcen für einen Anfänger in guten, altmodischen Js geschrieben werden (es sei denn, Rick Olsen beschließt plötzlich, einige zu veröffentlichen Beginn der JS-Tutorials in seinem Blog).
Daniel Mendel
2
Sie müssen auch Javascript verstehen, um Coffeescript schreiben zu können. Damit Sie Ihren Code debuggen können, wenn etwas schief geht.
Blaise
Update: CoffeeScript verfügt jetzt über ausreichend Dokumente, und Quellkarten machen das Debuggen von JS-Code unnötig. JavaScript ist heutzutage nur ein Ziel. Das Erlernen von JS ist immer noch sehr nützlich, aber ein Anfänger kann genug CoffeeScript lernen, ohne JavaScript zu kennen, um mit dem Codieren zu beginnen.
Carl Smith
3

Beachten Sie, dass Sie, obwohl es einen Compiler gibt, aufgrund der Dynamik von JavaScript keine statische Überprüfung erhalten. Wie in den FAQ geschrieben:

Statische Analyse

CoffeeScript verwendet einen direkten Source-to-Source-Compiler. Es wird keine Typprüfung durchgeführt, und wir können nicht herausfinden, ob überhaupt eine Variable vorhanden ist oder nicht. Dies bedeutet, dass wir keine Funktionen implementieren können, die andere Sprachen ohne kostspielige Laufzeitprüfungen nativ einbauen können. Infolgedessen wird jede Funktion, die auf dieser Art von Analyse beruht, nicht berücksichtigt.

Die IDE-Unterstützung ist weniger ausgereift als die von JavaScript (Cloud9 unterstützt Syntax-Highlights, Eclipse JSDT bietet jedoch Refactorings und mehr): /programming/4084167/ide-or-its-add-in-for-coffescript -Programmierung

thSoft
quelle