2016-05-23 27 views
8

sto cercando di esportare una classe ES6 da un modulo CommonJS in Node.js 6.2.0Node.js ES6 come esportare la classe dal modulo?

class MyClass{ 
    //class contents here 
} 

exports = MyClass; 

Quindi importare in un altro modulo:

var MyClass = require('/path/to/module.js') 
var instance = new MyClass(); 

Comunque io sto ottenendo il seguente eccezione:

TypeError: MyClass is not a constructor 

Come posso farlo correttamente?

Si noti che non sto utilizzando Babel/Tranceur è puro JS implementato nell'ultimo Nodo 6.2.0 che secondo Kangax implementa ES6 nel 93%.

// Modifica: questo non è un problema con esportazioni vs module.exports. Durante l'utilizzo delle sole esportazioni, ottengo qualche oggetto con il set __proto__.

+1

Prova a registrare ciò che ottieni dopo aver richiesto il modulo. _Se non è un costruttore, che cos'è? _ – sdgluck

+1

* "questo non è un problema con esportazioni vs module.exports" * Sì lo è! 'exports = MyClass;' non esporta nulla. È un noop. 'module.exports = ...;' è il modo per esportare un singolo valore da un modulo. Il duplicato spiega perché 'exports = ...;' non funziona. –

+0

Dovresti contrassegnare @Bergi come corretta (facendo clic sul pulsante grigio 'ceck' sul lato sinistro della risposta) –

risposta

22

È necessario assegnare a module.exports, non la variabile locale exports.

+2

@ kubal5003: Da questo stesso articolo: "*' require' restituisce un oggetto, che fa riferimento al valore di 'module .exports' per un dato file * ". Come si sbaglia la mia risposta? Hai provato a utilizzare 'module.exports = MyClass'? – Bergi

+2

@ kubal5003: questa risposta è corretta. Se non ci credi, hai bisogno di dedicare più tempo all'apprendimento dei moduli Node/CommonJS. –

+0

Questo ha funzionato per me. Questo dovrebbe essere accettato come soluzione. –