Confusión de coffeescript y node.js. ¿Necesitas instanciar clase?

Tengo problemas para intentar que mi clase funcione en mi archivo node.js. Cuando requiero el módulo que escribí, el requerimiento ‘./module’ llama a mi constructor y da un error. Pero en realidad quiero crear una instancia más adelante en el archivo.

es decir

class Mic constructor: (x) -> @t = [] @t.push x exports.Mic = Mic 

y aquí está mi archivo app.coffee

 require 'coffee-script' require './Mic' 

Cuando ejecuto app.coffee da una excepción ReferenceError: x no está definido. Lo que tiene sentido desde que llama al constructor, pero ¿por qué llama al constructor a pesar de que no lo he llamado nuevo Mic?

Editar Después de corregir la sangría

 class Mic constructor: (x) -> @t = [] @t.push x exports.Mic = Mic 

y actualizando mi app.coffee a

 Mic = require './Mic' m = new Mic 3 console.log m 

Me sale el error

 TypeError: object is not a function at Object.CALL_NON_FUNCTION_AS_CONSTRUCTOR (native) 

Lo primero es lo primero: no necesita el require 'coffee-script' requerido require 'coffee-script' correrlo con coffee es suficiente; Igual que ejecutar el JavaScript comstackdo. No necesita la biblioteca CoffeeScript disponible en tiempo de ejecución en su progtwig.

En segundo lugar, el primer archivo aparece sangrado incorrectamente; Si quieres que sea el constructor de Mic , sangra un nivel debajo de la class , es decir:

 class Mic constructor: (x) -> @t = [] @t.push x exports.Mic = Mic 

Finalmente, el problema es que las exports son objeto de exportaciones. Mira aquí:

 exports.Mic = Mic 

Has asignado Mic a la clave Mic del objeto de exports , por lo que ahora las exports en Mic.coffee tienen este aspecto:

 { Mic: ...your class... } 

Cuando dices que se require './Mic' , estás recuperando ese objeto; en otras palabras:

 require('./Mic') == { Mic: ...your class... } 

Entonces necesitas hacer uno de los siguientes:

  1. Exportar Mic como la exportación completa de Mic.coffee, y no como una clave:

     module.exports = Mic 
  2. Saque todo el módulo y luego cree una instancia del objeto Mic en:

     mic = require './Mic' m = new mic.Mic 3 
  3. Simplemente saca el Mic del módulo require :

     {Mic} = require './Mic' # equivalent to saying Mic = require('./Mic').Mic m = new Mic 3