Я думал, что вчера выяснил это, но, по-видимому, не понял, и после еще одного полного дня попыток выяснить это, я снова прошу помощи.
У меня есть модуль, который "установлен"через npm link
, который написан на ES6.Существует класс, который я экспортирую, называется Perishable.Я сократил класс до минимума, если проблема все еще существует.
export default class Perishable {
constructor() {
}
}
Я пытаюсь расширить класс, и я делаю это так:
// Perishable is imported already and IS NOT NULL.
export default class Apple extends Perishable {
constructor() {
super()
}
}
При вызове new Apple()
я получаю следующую ошибку: Class constructor Perishable cannot be invoked without 'new'
Однако я могу напрямую создать новый класс скоропортящихся через new Perishable()
без проблем.
Добавить наэто, копирование + вставка класса в тот же каталог и импортирование его с использованием относительного пути позволяет мне правильно вызвать new Apple()
.Я считаю, что это связано с тем, как webpack / babel переносит символьный класс.Это то, что я получаю при проверке переданного кода: класса с символическими ссылками
var Apple = function (_Perishable) {
_inherits(Apple, _Perishable);
function Apple() {
_classCallCheck(this, Apple);
return _possibleConstructorReturn(this, (Apple.__proto__ || Object.getPrototypeOf(Apple)).call(this));
}
return Apple;
}(_idleEngine.Perishable);
Это то, что я получаю, когда проверяю код локального класса (который работает правильно).
var Apple = function (_Perishable) {
_inherits(Apple, _Perishable);
function Apple() {
_classCallCheck(this, Apple);
return _possibleConstructorReturn(this, (Apple.__proto__ || Object.getPrototypeOf(Apple)).call(this));
}
return Apple;
}(_Perishable3.default);
Единственное различие между двумя сгенерированными кодами состоит в том, что находится в конце curlies, один - (_idleEngine.Perishable)
, а другой - (_Perishable3.default)
.
console.log(Perishable)
возвращает одно и то же для обоих типов импорта, а new Perishable()
прекрасно работает для обоих типов импорта.
Я должен добавить, что класс символической ссылки импортируется через npm link
и класс local
, который я только что скопировал + вставил из библиотеки, чтобы он находился в той же папке, что и класс Apple.
РЕДАКТИРОВАТЬ: Кажется, это проблема только с syslinked модулями, так какпубликация модуля «исправила» проблему.