Como exportar uma classe ES6 corretamente no nó 4?

eu defini uma classe num Módulo:

"use strict";

var AspectTypeModule = function() {};
module.exports = AspectTypeModule;

var AspectType = class AspectType {
    // ...    
};

module.export.AspectType = AspectType;

mas recebo a seguinte mensagem de erro:

TypeError: Cannot set property 'AspectType' of undefined
    at Object.<anonymous> (...\AspectType.js:30:26)
    at Module._compile (module.js:434:26)
    ....

Como devo exportar esta classe e usá-la noutro módulo? Eu vi outras perguntas assim, mas eu recebo outras mensagens de erro quando eu tento implementar suas soluções.

Author: Bergi, 2015-09-18

9 answers

Se estiver a usar o ES6 no nó 4, não pode usar a sintaxe do módulo ES6 sem um transpilador, mas os módulos CommonJS (módulos padrão do nó) funcionam da mesma forma.

module.export.AspectType

Deve ser

module.exports.AspectType

Daí a mensagem de erro "Não pode definir a propriedade 'AspectType' de indefinido " porque module.export === undefined.

Também para

var AspectType = class AspectType {
    // ...    
};
Podes escrever?
class AspectType {
    // ...    
}
E ter essencialmente o mesmo comportamento.
 79
Author: loganfsmyth, 2015-09-18 17:40:04
// person.js
'use strict';

module.exports = class Person {
   constructor(firstName, lastName) {
       this.firstName = firstName;
       this.lastName = lastName;
   }

   display() {
       console.log(this.firstName + " " + this.lastName);
   }
}

 

// index.js
'use strict';

var Person = require('./person.js');

var someone = new Person("First name", "Last name");
someone.display();
 68
Author: sitrakay, 2017-02-24 07:24:56

expressão da classe pode ser usado para simplicidade.

 // Foo.js
'use strict';

// export default class Foo {}
module.exports = class Foo {}

-

// main.js
'use strict';

const Foo = require('./Foo.js');

let Bar = new class extends Foo {
  constructor() {
    super();
    this.name = 'bar';
  }
}

console.log(Bar.name);
 11
Author: masakielastic, 2015-12-07 09:13:18

Utilizar

// aspect-type.js
class AspectType {

}

export default AspectType;

Depois importá-lo

// some-other-file.js
import AspectType from './aspect-type';

Leia http://babeljs.io/docs/learn-es2015/#modules para mais detalhes

 10
Author: user633183, 2015-09-18 17:21:04

Com o ECMAScript 2015 poderá exportar e importar várias classes como esta

class Person
{
    constructor()
    {
        this.type = "Person";
    }
}

class Animal{
    constructor()
    {
        this.type = "Animal";
    }
}

module.exports = {
    Person,
    Animal
};

Depois, onde os usar:

const { Animal, Person } = require("classes");

const animal = new Animal();
const person = new Person();

Em caso de colisões de nomes, ou se preferir outros nomes, pode renomeá-los assim:

const { Animal : OtherAnimal, Person : OtherPerson} = require("./classes");

const animal = new OtherAnimal();
const person = new OtherPerson();
 10
Author: Jonas Brandel, 2018-03-02 20:50:43
Várias das outras respostas chegam perto, mas honestamente, acho que é melhor usar a sintaxe mais simples e limpa. O PO solicitou um meio de exportar uma classe em ES6 / ES2015. Acho que não se pode ficar mais limpo do que isto.
'use strict';

export default class ClassName {
  constructor () {
  }
}
 8
Author: Crates, 2017-01-25 18:11:34

Eu simplesmente escrevo assim

No ficheiro AspectType:

class AspectType {
  //blah blah
}
module.exports = AspectType;

E importá-lo assim:

const AspectType = require('./AspectType');
var aspectType = new AspectType;
 2
Author: Behnam Ghiaseddin, 2017-10-14 09:21:32
Tive o mesmo problema. O que encontrei foi que chamei ao meu objecto de recepção o mesmo nome que o nome da turma. exemplo:
const AspectType = new AspectType();
Isto estragou as coisas assim... espero que isto ajude.
 0
Author: shahar taite, 2016-09-21 12:50:17

Às vezes eu preciso declarar várias classes em um arquivo, ou eu quero exportar classes base e manter seus nomes exportados por causa do meu editor JetBrains entende isso melhor. Eu só uso

global.MyClass = class MyClass { ... };

E em qualquer outro lugar:

require('baseclasses.js');
class MySubclass extends MyClass() { ... }
 -1
Author: Jelmer Jellema, 2017-05-15 14:09:55