【问题标题】:Preventing Inheritance issues with coffeescript and gulp使用 coffeescript 和 gulp 防止继承问题
【发布时间】:2016-08-30 00:32:48
【问题描述】:

我经常通过在 coffeescript 中构建类来工作,每个类都是它自己的 coffeescript 文件。然后我有一个编译器(如 Gulp)将我构建的所有不同类文件合并并缩小到一个缩小的 .js 文件中。

我的问题来自继承。由于我的编译器只是在没有任何特定顺序的情况下折腾文件,因此我可能会以下面的代码结束。

#file: otherThing.coffee
#the class "Thing" is not yet defined, this will error
class window.otherThing extends window.Thing  
    _prop: "that other thing"
    method: () => 
       super()

#file: thing.coffee
class window.Thing
    _prop: "the thing"
    method: () =>
       console.log(@_prop)

我目前(草率)的解决方案是像这样在每个文件中提供注释。

#[COMPILE_PRIORITY:0.1]

我让编译器嗅出这些标签,并在将它们连接到单个文件时相应地对文件进行排序。

有没有更好的方法来做到这一点?

【问题讨论】:

    标签: inheritance coffeescript gulp


    【解决方案1】:

    我认为你想要的是制作一个依赖图,然后做一个topological sort。这种排序将基于该依赖关系图为您构建一个顺序,您将根据正在扩展的类构建该顺序。

    好消息是,似乎有人已经使用Coffee-Graph 为 CoffeeScript 完成了这项工作。因此,您可以尝试在您的 Gulp 文件中为 Coffee-Graph 设置一个步骤,它将以(希望)正确的顺序将文件发送到 CoffeeScript 编译器。

    【讨论】:

      【解决方案2】:

      全面披露

      我从未使用过咖啡脚本。但是,我确实使用 javascript 并且吞了很多。作为@Git Wizard suggested,也许Coffee-Graph 可以解决问题。但是,可能还有其他方法。

      我们所知道的

      来自The Little Book on CoffeeScript

      在幕后,CoffeeScript 使用 JavaScript 的原生原型 创建类;为静态属性添加一些语法糖 继承和上下文持久性。作为开发人员,所有这些都暴露了 对你来说是类关键字。

      只要它们被同一个应用程序包含或引用,Javascript 对象就相互了解,这意味着只要它们位于相同的词法上下文中。由于 gulp 将所有文件都带入管道,因此您的 咖啡脚本编译器 可能会在它们一次通过管道流时对其进行编译。情况似乎确实如此,因此缺少其他文件中包含的类的定义。

      来自http://coffeescript.org/

      词法作用域和变量安全

      CoffeeScript 编译器会注意确保您的所有 变量被正确地在词法范围内声明

      我们可以尝试什么

      使用gulp-concat 之类的东西将所有脚本文件连接到一个文件中。因为编译器一次拥有所有内容,因此所有类都在同一个词法范围内,所以它可能能够正确引用所有定义的类。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-03-01
        • 1970-01-01
        • 2011-06-04
        • 1970-01-01
        • 1970-01-01
        • 2017-07-09
        • 1970-01-01
        • 2010-10-31
        相关资源
        最近更新 更多