Подтвердить что ты не робот

Node.js module.exports в CoffeeScript

Я работаю над простым примером; Я могу заставить его работать с Javascript, но что-то не так с моей версией CoffeeScript.

Вот человек.кофе:

module.exports = Person

class Person 
    constructor: (@name) ->

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

И вот index.coffee:

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

Я ожидаю запустить index.coffee и увидеть консольный вывод "Мое имя - Эмма". Вместо этого я получаю сообщение об ошибке: TypeError: undefined не является функцией.

4b9b3361

Ответ 1

Поместите строку module.exports внизу.

---- 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' }

Когда вы назначаете module.exports вверху, переменная Person по-прежнему undefined.

Ответ 2

Вы также можете написать в person.coffee:

class @Person

Затем используйте следующее в index.coffee:

{Person} = require './person'

Ответ 3

Вы также можете написать

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

то в index.coffee либо

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

или вы могли бы сделать это таким образом

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

Ответ 4

Различные ответы здесь кажутся само собой разумеющимися, что единственным объектом, экспортированным модулем, является класс (вид "образа мышления Java" )

Если вам нужно экспортировать несколько объектов (классы, функции и т.д.), вероятно, лучше всего написать:

exports.Person = class Person
    [...]


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