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 не является функцией.
Ответы
Ответ 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"