如何将CoffeeScript与Google Closure一起使用

时间:2013-03-12 13:58:31

标签: coffeescript google-closure

最近我开始使用Google Closure Tools进行javascript开发。到目前为止,我已经习惯在CoffeeScript中编写代码,但CoffeeScript生成的javascript似乎与Google Closure Compiler的高级模式不兼容。

添加Google Closure支持的CoffeeScript编译器是否有任何扩展?

1 个答案:

答案 0 :(得分:7)

有各种工具旨在使CoffeeScriptGoogle Closure Tools一起使用。我将描述其中三个:

Bolinfest的CoffeeScript前叉

特点:

  • 修复了功能绑定,循环,理解,in运算符和其他各种不兼容问题
  • Google Closure的固定类语法
  • 自动生成@constructor@extends注释
  • 自动为声明的每个类
  • 插入goog.provide语句
  • Python的include namespace as alias支持已转换为goog.requiregoog.scope

缺点:

  • 构造函数必须是类
  • 中的第一个语句
  • 不能对类中的类使用短别名(即类My.Long.Named.Car不能在类定义中称为Car,因为纯CoffeeScript允许)
  • 用户编写的JsDoc注释不会与编译器生成的注释合并
  • 缺少与provide
  • 相同的include
  • 不支持类型转换,这只能通过在反引号中插入纯javascript代码来实现"`"
  • 基于过时的CoffeeScript 1.0

http://bolinfest.com/coffee/

了解详情

我的CoffeeScript fork

免责声明:我是此解决方案的作者

这个解决方案的灵感来自Bolinfest的工作,并以这些方式扩展它:

  • 构造函数可以放在类中的任何位置
  • 类的短别名使用goog.scope
  • 工作
  • 用户编写的JsDoc注释与生成的编译器合并,用户编写的@constructor@extends注释被生成的
  • 替换
  • 每个命名空间大多数提供或包含一次,名称空间,永远不会包含。您可以按关键字provide
  • 提供命名空间
  • 使用cast<typeToCastTo>(valueToBeCast)语法
  • 支持类型转换
  • 基于CoffeeScript 1.6

https://github.com/hleumas/coffee-script/wiki

了解详情

Steida的Coffee2Closure

与上述两种解决方案不同,Steida的Coffee2Closure是由上游非虚拟CoffeeScript生成的javascript代码的后处理器。这种方法有一个主要优点,即不需要或只需要稍微更新一下,继续开发CoffeeScript并且仍然是实际的。但是,根据这种方法的本质,某些功能无法提供。目前它只修复了类和绑定,循环,in运算符和其他一些不兼容性。它不支持自动注释生成,类型转换或自定义关键字。

https://github.com/Steida/coffee2closure