Подтвердить что ты не робот

Как правильно экспортировать класс ES6 в Node 4?

Я определил класс в модуле:

"use strict";

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

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

module.export.AspectType = AspectType;

Но я получаю следующее сообщение об ошибке:

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

Как я должен экспортировать этот класс и использовать его в другом модуле? Я видел другие вопросы SO, но я получаю другие сообщения об ошибках, когда я пытаюсь реализовать их решения.

4b9b3361

Ответ 1

Если вы используете ES6 в Node 4, вы не можете использовать синтаксис модуля ES6 без транспилятора, но модули CommonJS (Node стандартные модули) работают одинаково.

module.export.AspectType

должен быть

module.exports.AspectType

поэтому сообщение об ошибке "Невозможно установить свойство" AspectType "из undefined", поскольку module.export === undefined.

Кроме того, для

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

можете ли вы просто написать

class AspectType {
    // ...    
}

и получить по существу одно и то же поведение.

Ответ 2

// 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();

Ответ 3

С ECMAScript 2015 вы можете экспортировать и импортировать несколько классов, подобных этому

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

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

module.exports = {
    Person,
    Animal
};

то где вы их используете:

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

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

В случае конфликтов имен или вы предпочитаете другие имена, вы можете переименовать их следующим образом:

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

const animal = new OtherAnimal();
const person = new OtherPerson();

Ответ 4

Использование

// aspect-type.js
class AspectType {

}

export default AspectType;

Затем, чтобы импортировать его

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

Подробнее читайте http://babeljs.io/docs/learn-es2015/#modules

Ответ 5

выражение класса можно использовать для простоты.

 // 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);

Ответ 6

Несколько других ответов приблизились, но, честно говоря, я думаю, вам лучше пойти с самым простым и простейшим синтаксисом. OP запросил средство экспорта класса в ES6/ES2015. Я не думаю, что вы можете стать намного чище, чем это:

'use strict';

export default class ClassName {
  constructor () {
  }
}

Ответ 7

Я просто пишу это так

в файле AspectType:

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

и импортируйте его следующим образом:

const AspectType = require('./AspectType');
var aspectType = new AspectType;

Ответ 8

У меня была та же проблема. То, что я нашел, я назвал мой получающий объект тем же именем, что и имя класса. Пример:

const AspectType = new AspectType();

вот эта штучка... надеюсь, что это поможет

Ответ 9

ReferenceError: Модуль не определен в Object. (/Users/Shared/MAKE FIRST CODING/0 SPESTING SPACE/курс HTML/scripts/rectangle.js: 12: 1) в Module._compile (module.js: 653: 30) в Object.Module._extensions..js( module.js: 664: 10) в Module.load(module.js: 566: 32) в tryModuleLoad (module.js: 506: 12) в Function.Module._load (module.js: 498: 3) в модуле. требовать (module.js: 597: 17) по требованию (внутренний /module.js: 11:18)

то же самое случилось со мной, но проблема не решена.. Я пытаюсь экспортировать класс Rectangle в узел, но визуальный код предлагает быстрое решение для преобразования его в ES6. module.exports = Rectangle; стал экспортным прямоугольником по умолчанию; Затем с помощью команды на узле "var Rectangle = require ('./rectangle.js')" появляется следующая ошибка синтаксиса: Неожиданный экспорт токена

Ответ 10

Иногда мне нужно объявить несколько классов в одном файле, или я хочу экспортировать базовые классы и сохранить их имена, экспортированные из-за того, что редактор JetBrains лучше это понимает. Я просто использую

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

И где-то еще:

require('baseclasses.js');
class MySubclass extends MyClass() { ... }