我已经在这堵砖墙上猛击了一天,所以我该向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) {
最佳答案
这太可怕了,并引起您的问题。该模块会默认导出对象文字,而不只是使用命名的导出。这可能是一个错误,他们打算写
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();