从Babel v5升级到v6 +时出现“ TypeError不是构造函数”

时间:2019-05-15 11:50:16

标签: javascript mocha babeljs es6-modules

我已经在这堵砖墙上猛击了一天,所以我该向SO寻求帮助了!我正在尝试从babel v5更新项目,我从package.json开始:

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

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

我曾尝试将v6和v7升级到babel,但一次都没有成功。在这两种情况下,当我尝试运行适用于v5的测试时,都以TypeError: _application.ApplicationClient is not a constructor结尾:

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 个答案:

答案 0 :(得分:1)

  

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