Как создать экземпляр класса es6, который был перенесен в es5 - PullRequest
0 голосов
/ 08 мая 2019

Я создаю модуль, который хочу опубликовать в NPM. Модуль экспортирует класс, для создания экземпляра которого используется ключевое слово new. Я хочу, чтобы пакет можно было импортировать, используя ключевое слово es5 require, а также ключевое слово import es6. Я перенес код в es5 для обратной совместимости. Когда я тестирую его с помощью импорта и переноса es5, код запускается, как и ожидалось. Однако, когда я тестирую его с помощью ключевого слова require (), я получаю сообщение об ошибке, что класс не является конструктором. Я создал примеры кодов, чтобы повторить проблему.

Это пример класса, который я перенес в es5 в файле index2.js

// classe.js

class MyClass {
  constructor() {
    this.name = 'name'
  }
  greet() {
    return `Hello ${this.name}`;
  }
}

export default MyClass;

Для проверки кода я создал два кода проверки ниже

Вот реализация es5. Я ожидаю, что, поскольку index2 уже находится в es5, он должен работать, выполнив node test1

// test1.js

const MyClass = require('./index2');

console.log(MyClass)

const greeter = new MyClass()
const greeting = greeter.greet();
console.log(greeting)

Здесь реализация es6. Когда я передаю это и выполняю как node test2, это дает ожидаемый результат.

// test2.js

import MyClass from './index2';

console.log(MyClass)

const greeter = new MyClass()
const greeting = greeter.greet();
console.log(greeting)

Вот мой ожидаемый результат

[Function: MyClass]
Hello name 

это ошибка, которую я получаю при запуске test1.js

{ default: [Function: MyClass] }
/Users/godfreytutu/Desktop/classe/test1.js:5
const greeter = new MyClass()
                ^

TypeError: MyClass is not a constructor

Пожалуйста, как мне это реализовать, чтобы я мог использовать ключевое слово require и ключевое слово import? Спасибо.

...