2012-02-27 15 views
9

Ben 2 sınıf dosyaları var:Düğüm CoffeeScript sınıf dosyaları ve miras

foo.coffee: class Foo

bar.coffee: bunlar dünyada kullanılamadığını yüzden bu sınıfları nasıl tanımlarım class Bar extends Foo

? Bar numaralı hatayı alıyorum, Foo tanımlanmadı.

Scriptleri çalıştırmak için node'u aradığım bir index.js dosyası var. İşte büyük olasılıkla da bu yanlış yaptılar, index.js içeriği olan:

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

cevap

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" 

GÜNCELLEME: Ayrıca, önce onları derlemediğiniz sürece, coffee ile .coffee dosyalarını çalıştırmanız gerekir.

UPDATE 2: Modellerinizi nasıl yapılandırdığınız size kalmış. Ben yukarıdaki kalıbı gibi (basit modüller sadece bir işlev dışa nerede - Eğer sadece exports atamak çünkü module.exports atamak gerekir işte o zaman) ama diğerleri böyle bir yapıyı tercih:

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 

Her bir modül bir veya daha fazla özelliğe sahip bir nesneyi dışa aktarır.

+0

ben uymak istedim ve ben Linus ile ve nasıl bir modül sadece sınıf ihraç gerektiğini kabul söylüyorlar. Tabii ki, bazı istisnalar var, ama genel olarak iyi bir uygulama. –

+0

(Özür dilerim!) - @Linus: Aynı tekniği istemci tarafında kullanmak için bir yaklaşım önerebilir misiniz? RequireJS (bir sürü genel gider gibi görünüyor)? – polarblau

+1

@polarblau: Elbette, benim için çok iyi çalışan [dikiş] (https://github.com/sstephenson/stitch) kullanıyorum. Küçük, hafif ve istemciye 'gerektirir' verir. –

3

Ayrıca yazabilirsiniz:

class @MyClass 
    [...] 

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