7

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

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

4

1 回答 1

7

有多种工具旨在使CoffeeScript可与Google 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 分支

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

该解决方案受到 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

于 2013-03-12T13:58:30.800 回答