Inheritance 使用coffeescript和gulp防止继承问题

Inheritance 使用coffeescript和gulp防止继承问题,inheritance,coffeescript,gulp,Inheritance,Coffeescript,Gulp,我经常在coffeescript中构建类,每个类都是自己的coffeescript文件。然后我有一个编译器(比如Gulp)将我构建的所有不同类文件合并并缩小到一个缩小的.js文件中 我的问题来自继承。由于我的编译器只是在没有任何特定顺序的文件中进行转换,因此我可能会结束下面的代码 #file: otherThing.coffee #the class "Thing" is not yet defined, this will error class window.otherThing exten

我经常在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]
我让编译器嗅出这些标记,并在将它们连接到单个文件时对文件进行相应的排序


有没有更好的方法来实现这一点?

我认为您想要的是制作一个依赖关系图,然后执行一个测试。这种排序将基于依赖关系图为您建立一个顺序,您将基于正在扩展的类来建立该顺序


好消息是,似乎有人已经为CoffeeScript做了这件事。因此,您可以尝试在Gulp file for Coffee Graph中添加一个步骤,该步骤将以正确的顺序(希望是正确的)将文件发送到CoffeeScript编译器。

我认为您需要的是创建一个依赖关系图,然后执行一个操作。这种排序将基于依赖关系图为您建立一个顺序,您将基于正在扩展的类来建立该顺序


好消息是,似乎有人已经为CoffeeScript做了这件事。因此,您可以尝试在Gulp file for Coffee Graph中添加一个步骤,该步骤将以正确的顺序(希望如此)将文件发送到CoffeeScript编译器。

完全公开

我从来没有用过咖啡剧本。然而,我确实经常使用javascript和gulp。作为@Git向导,也许咖啡图能起到作用。然而,可能还有另一种方法

我们所知道的

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

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

词汇范围界定和可变安全性

CoffeeScript编译器会注意确保 变量在词法范围内正确声明

我们可以尝试的


使用类似的方法将所有脚本文件连接到一个文件中。由于编译器一次拥有所有内容,因此所有类都在相同的词法范围内,因此它可能能够正确引用所有定义的类。

完全公开

我从来没有用过咖啡剧本。然而,我确实经常使用javascript和gulp。作为@Git向导,也许咖啡图能起到作用。然而,可能还有另一种方法

我们所知道的

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

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

词汇范围界定和可变安全性

CoffeeScript编译器会注意确保 变量在词法范围内正确声明

我们可以尝试的

使用类似的方法将所有脚本文件连接到一个文件中。由于编译器一次拥有所有内容,因此所有类都在同一词法范围内,因此它可能能够正确引用所有定义的类