Как использовать 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
оператор и несколько других несовместимостей. Он не поддерживает автоматическую генерацию аннотаций, приведение типов или пользовательские ключевые слова.