2012-02-27 11 views
9

私は2クラスファイルがあります。ノードCoffeeScriptのクラスファイルと継承

foo.coffee:class Foo

bar.coffee:class Bar extends Foo

彼らはグローバルに使用されているので、私はこれらのクラスを定義するにはどうすればよいですか? Fooが定義されていないBarにエラーが表示されます。

私はnodeというスクリプトを実行するindex.jsファイルを持っています。ここで私が最も可能性が高いにも、この間違ったをした、index.jsの内容は次のとおりです。

exports.Foo = require("./foo") 
exports.Bar = require("/bar") 

答えて

19

foo.coffee:

class Foo 
    // ... 

module.exports = Foo 

bar.coffee:

Foo = require "./foo" 

class Bar extends Foo 
    // ... 

module.exports = Bar 

index.coffee:

exports.Foo = require "./foo" 
exports.Bar = require "./bar" 

更新:.coffeeのファイルをcoffeeで実行する必要があります(ただし、最初にコンパイルしない限り)。

更新日2:モデルの構造はあなた次第です。私は(簡単なモジュールは、単に機能をエクスポートする場所 - あなたがmodule.exportsに割り当てる必要がある場合、それはだあなたは、単にexportsに割り当てることができないため)上記のパターンを好むが、他の人がこのような構造を好む:

foo.coffee:

class Foo 
    // ... 

exports.Foo = Foo 

bar.coffee:

Foo = require("./foo").Foo 

class Bar extends Foo 
    // ... 

exports.Bar = Bar 

index.coffee:

exports.Foo = require("./foo").Foo 
exports.Bar = require("./bar").Bar 

各モジュールは、1つ以上のプロパティを持つオブジェクトをエクスポートします。

+0

を私はチャイムしたいと私はライナスに同意し、どのモジュールがちょうどクラスをエクスポートする必要があることを言います。もちろん、いくつかの例外がありますが、全体的には良い練習です。 –

+0

(OTのお詫び!) - @Linus:クライアント側で同じ手法を使用する方法をお勧めしますか? RequireJS(オーバーヘッドが多いようです)? – polarblau

+1

@polarblau:確かに、私は[ステッチ](https://github.com/sstephenson/stitch)を使用しています。小型で軽量で、クライアントに「必要」を与えます。 –

3

また書くことができます。

class @MyClass 
    [...] 

{MyClassName} = require './myclassFile' 
myClass = new MyClassName