我已经苦思冥想了一整天,但还是不能解决这个问题,我认为现在该向SO(Stack Overflow的简称)求助了!我正在尝试将一个项目从babel v5升级到更高版本,我从package.json开始如下操作:
"devDependencies": {
"babel": "^5.8.21",
"test": "mocha --require babel/register",
我尝试升级babel到v6和v7,但两次都没有成功。在这两种情况下,当我尝试运行先前使用v5可以正常工作的测试时,我会遇到TypeError: _application.ApplicationClient不是构造函数
:
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 中进行配置,但是我不知道从这里往哪里走。
对于一个正在努力理解babel的人,更不用说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) {
ApplicationClient
是使用新版本的Babel定义或编译为箭头函数,而旧版本没有这样做。不幸的是,我对Babel不够熟悉,不知道从哪里开始验证和/或修复这个问题。不过,“不是构造函数”的消息通常来自尝试在箭头函数中使用new
。 - VLAZ../src/wiotp/sdk/application
导出了什么。 请在问题中包含这一点。 - loganfsmyth@babel
组织的作用域包中。 - adz5A