如何实例化已转换为es5的es6类

时间:2019-05-08 01:09:11

标签: javascript node.js babeljs es6-modules es6-class

我正在创建一个要发布到NPM的模块。该模块导出应使用new关键字实例化的类。我希望该软件包可以使用es5 require关键字以及es6 import关键字导入。为了向后兼容,我已将代码编译到es5。当我使用es6 import和es5进行测试时,代码按预期运行。但是,当我使用require()关键字对其进行测试时,出现一个错误,该类不是构造函数。我已经创建了示例代码来复制问题。

这是一个示例类,我将其转换为文件index2.js中的es5

// classe.js

class MyClass {
  constructor() {
    this.name = 'name'
  }
  greet() {
    return `Hello ${this.name}`;
  }
}

export default MyClass;

为了测试代码,我在下面创建了两个测试代码

这是es5实现。我希望由于index2已经在es5中,因此应该通过执行node test1

来运行
// test1.js

const MyClass = require('./index2');

console.log(MyClass)

const greeter = new MyClass()
const greeting = greeter.greet();
console.log(greeting)

这是es6实现。当我转换它并以node test2执行时,它将产生预期的结果。

// test2.js

import MyClass from './index2';

console.log(MyClass)

const greeter = new MyClass()
const greeting = greeter.greet();
console.log(greeting)

这是我的预期结果

[Function: MyClass]
Hello name 

这是我运行test1.js时遇到的错误

{ default: [Function: MyClass] }
/Users/godfreytutu/Desktop/classe/test1.js:5
const greeter = new MyClass()
                ^

TypeError: MyClass is not a constructor

请,我应该如何实现它以便可以使用require关键字和import关键字?谢谢。

0 个答案:

没有答案