Как использовать CoffeeScript вместе с Google Closure

Недавно я начал использовать Google Closure Tools для разработки javascript. До сих пор я писал свой код на CoffeeScript, однако JavaScript, сгенерированный CoffeeScript, кажется, несовместим с расширенным режимом Google Closure Compiler.

Есть ли расширение компилятора CoffeeScript, добавляющее поддержку Google Closure?

1 ответ

Решение

Существуют различные инструменты, позволяющие сделать CoffeeScript полезным с помощью инструментов Google Closure. Я опишу три из них:

CoffeeScript от Bolinfest

Особенности:

  • Исправлено связывание функций, циклы, понимания, in оператор и различные другие несовместимости
  • Исправлен синтаксис классов для Google Closure
  • Автоматическая генерация @constructor а также @extends аннотации
  • Автоматически вставляет goog.provide заявление для каждого объявленного класса
  • Питон как include namespace as alias поддержка переведена на goog.require а также goog.scope

Недостатки:

  • Конструктор должен быть самым первым утверждением в классе
  • Нельзя использовать короткие псевдонимы для классов внутри класса (т. Е. Класса My.Long.Named.Car не может рассматриваться как Car в определении класса, как позволяет чистый CoffeeScript)
  • Пользовательские комментарии JsDoc не объединяются с созданными компилятором
  • Отсутствует provide эквивалент для include
  • Нет поддержки приведения типов, это может быть сделано только путем вставки чистого кода JavaScript внутри обратных кавычек "`"
  • На основе устаревшего CoffeeScript 1.0

Узнайте больше на http://bolinfest.com/coffee/

Мой CoffeeScript форк

Отказ от ответственности: я являюсь автором этого решения

Это решение вдохновлено работой Bolinfest и расширяет ее следующими способами:

  • Конструктор может быть размещен в любом месте внутри класса
  • Короткие псевдонимы для занятий с использованием goog.scope
  • Написанные пользователем комментарии JsDoc объединяются с созданным компилятором, написанным пользователем @constructor а также @extends аннотации заменяются на сгенерированные
  • Каждое пространство имен предоставляется или включается в основном один раз, пространство имен, которое предоставляется, никогда не включается. Вы можете предоставить пространство имен по ключевому слову provide
  • Поддержка типотипирования с использованием cast<typeToCastTo>(valueToBeCast) синтаксис
  • Основано на CoffeeScript 1.6

Узнайте больше на https://github.com/hleumas/coffee-script/wiki

Steida's Coffee2Closure

В отличие от двух вышеупомянутых решений, Steida Coffee2Closure является постпроцессором кода javascript, сгенерированного восходящим нетекстовым CoffeeScript. У этого подхода есть одно важное преимущество: он не требует или требует лишь незначительных обновлений при продолжении разработки CoffeeScript и все еще актуален. Однако по самой природе этого подхода некоторые функции не могут быть предоставлены. На данный момент исправляет только классы и привязки, циклы, in оператор и несколько других несовместимостей. Он не поддерживает автоматическую генерацию аннотаций, приведение типов или пользовательские ключевые слова.

https://github.com/Steida/coffee2closure

Другие вопросы по тегам