【问题标题】:How to use CoffeeScript together with Google Closure如何将 CoffeeScript 与 Google Closure 一起使用
【发布时间】:2013-03-12 13:58:30
【问题描述】:

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

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

【问题讨论】:

    标签: coffeescript google-closure


    【解决方案1】:

    有多种工具旨在使CoffeeScript 可与Google Closure Tools 一起使用。我将描述其中三个:

    Bolinfest 的 CoffeeScript 分支

    特点:

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

    缺点:

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

    阅读更多http://bolinfest.com/coffee/

    我的 CoffeeScript 分支

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

    此解决方案的灵感来自 Bolinfest 的工作,并通过以下方式对其进行了扩展:

    • 构造函数可以放置在类中的任何位置
    • 类的短别名使用goog.scope
    • 用户编写的 JsDoc cmets 与编译器生成的合并,用户编写的 @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

    【讨论】:

    • 可以更新这个答案吗?我尝试了您的 CoffeeScript 版本,但 wiki link 上的示例无法在 Closure Compiler 上编译。
    • @FakeRainBrigand 请在 Github 上填写问题并提供更多详细信息。我一定会看看并修复它。
    猜你喜欢
    • 2013-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-28
    • 1970-01-01
    • 2014-07-04
    • 2012-11-12
    • 1970-01-01
    相关资源
    最近更新 更多