«Ошибка типа не конструктор» при обновлении проекта с Babel v5 до v6 + - PullRequest
4 голосов
/ 15 мая 2019

Я уже целый день бьюсь головой об эту кирпичную стену, так что пришло время обратиться за помощью, я думаю! Я пытаюсь обновить проект с babel v5, я начинаю с этого в package.json:

"devDependencies": {
    "babel": "^5.8.21",

"test": "mocha --require babel/register",

Я пытался перейти на babel как v6, так и v7, но безуспешно. В обоих случаях я получаю TypeError: _application.ApplicationClient is not a constructor, когда пытаюсь запустить тесты, которые работали нормально с v5:

import { ApplicationClient } from '../src/wiotp/sdk/application';
...
let client = new ApplicationClient();

Используя v6 в качестве примера, я получаю следующее в package.json:

  "devDependencies": {
    "babel-cli": "^6.0.0",
    "babel-core": "^6.0.0",
    "babel-preset-env": "^1.7.0",
    "mocha": "6.1.4",

"test": "mocha --require babel-core/register --timeout 5000",

и создал файл .babelrc (ранее его не было):

{
    "presets": ["env"]
}

Я прочитал дюжину или более статей, пытаясь понять, что здесь происходит, я сделал и отменил многочисленные предлагаемые "исправления", основанные на поиске в Google похожих проблем, но я начинаю с нуля и нахожу его невероятно трудно получить простое простое английское объяснение того, что является настоящей проблемой для начала, и как предполагается, что babel должен быть настроен здесь для ее решения. Я предполагаю, что что-то, что произошло по умолчанию в v5, нужно как-то настроить в .babelrc сейчас, но / shrugs / не знаю, куда идти дальше.

Есть какие-нибудь указатели для того, кто изо всех сил пытается обернуть голову вокруг бабел, не говоря уже о различиях между v5, 6 и 7?

Редактировать:

src / wiotp / sdk / application / index.js имеет это:

import { default as ApplicationClient } from './ApplicationClient';

export default {
  ApplicationClient
}

Где src / wiotp / sdk / application / ApplicationClient.js экспортировал один класс (я просто пытаюсь создать экземпляр этого класса в тестовом коде):

export default class ApplicationClient extends BaseClient {
  constructor(config) {

1 Ответ

1 голос
/ 16 мая 2019

src / wiotp / sdk / application / index.js имеет следующее:

import { default as ApplicationClient } from './ApplicationClient';

export default {
  ApplicationClient
}

Это ужасно и вызывает вашу проблему.Этот модуль выполняет экспорт объекта по умолчанию, а не просто использует именованный экспорт.Это может быть ошибка, и они намеревались написать либо

import { default as ApplicationClient } from './ApplicationClient';
export { ApplicationClient }

, либо

export { default as ApplicationClient } from './ApplicationClient';

. Рекомендуется сообщить о проблеме и предоставить исправление.

Если этоне считается ошибкой, но сделано специально, вам нужно изменить код на

import application from '../src/wiotp/sdk/application';
…
let client = new application.ApplicationClient();
//               ^^^^^^^^^^^^

или просто импортировать его непосредственно из исходного модуля:

import ApplicationClient from '../src/wiotp/sdk/application/ApplicationClient.js';
//                                                          ^^^^^^^^^^^^^^^^^^^^^
…
let client = new ApplicationClient();
...