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.
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.
// 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();
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);
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
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();
'use strict';
export default class ClassName {
constructor () {
}
}
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;
const AspectType = new AspectType();
Isto estragou as coisas assim...
espero que isto ajude.
À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() { ... }