2012-09-07 8 views
19

Estoy trabajando en un ejemplo simple; Puedo hacer que funcione con Javascript, pero hay algo mal con mi versión de CoffeeScript.Node.js module.exports en CoffeeScript

Aquí es person.coffee:

module.exports = Person 

class Person 
    constructor: (@name) -> 

    talk: -> 
     console.log "My name is #{@name}" 

Y aquí es index.coffee:

Person = require "./person" 
emma = new Person "Emma" 
emma.talk() 

estoy esperando para funcionar index.coffee y ver la salida de la consola "Mi nombre es Emma" . En cambio, recibo un error que dice TypeError: undefined en no una función.

Respuesta

26

Ponga la línea module.exports en la parte inferior.

---- ---- person.coffee

class Person 
    constructor: (@name) -> 

    talk: -> 
     console.log "My name is #{@name}" 

module.exports = Person 

Person = require "./person" // [Function: Person] 
p = new Person "Emma" // { name: 'Emma' } 

Cuando se asigna a module.exports en la parte superior, la variable Person sigue siendo undefined.

+0

Eso es todo! Muchas gracias. –

+0

fyi: para comprender por qué podría ser útil observar el patrón tradicional en javascript para hacer que los módulos – froginvasion

15

También podría escribir en person.coffee:

class @Person 

continuación, utilizar el siguiente en index.coffee:

{Person} = require './person' 
+0

hayan intentado esto y sigan obteniendo el error 'el objeto no es una función'. – majidarif

+0

@majidarif Eche un vistazo a su código compilado para comprobar si tiene sentido. ¿Estás ejecutando en un entorno o navegador Node.js? – vaughan

+0

Actualmente estoy en Node.js, tengo 2 clases en 1 archivo y 2 clases que se extienden una y una de esas clases. Entonces el subcass es el que necesitaba exportar. – majidarif

5

También podría escribir

module.exports = class Person 
    constructor: (@name) -> 
    console.log "#{@name} is a person" 

después en index.coffee ya sea

bob = new require './person' 'Bob' 

o podría hacerlo de esta manera

Person = require './person' 
bob = new Person 'bob' 
2

Las diversas respuestas aquí parece dar por sentado que el único objeto exportado por el módulo es la clase (clase de "camino de Java del pensamiento")

Si necesita exportar varios objetos (clases, funciones, etc.), lo que probablemente debería ser mejor escribir:

exports.Person = class Person 
    [...] 


coffee> { Person } = require "./person" 
coffee> p = new Person "Emma" 
Cuestiones relacionadas