如何在节点中导出类?

时间:2016-11-09 21:01:31

标签: javascript node.js

这看起来很简单,但我有点像节点/ javascript新手。如何使用节点7.0.0从另一个文件导入类?

我在一个档案中定义了我的课程:

'use strict';

class MyClass {
  ...
};

module.exports = MyClass;

我想在另一堂课中使用它:

var MyClass = require('./path/to/otherfile');
...
var myclass = new MyClass(some param);

但是我从我的linter那里得到一个错误

TypeError: Class constructor MyClass cannot be invoked without 'new'

1 个答案:

答案 0 :(得分:2)

此代码是正确的,适用于Node 7.0.0。见这个例子:

档案class.js

'use strict';
class MyClass {
}
module.exports = MyClass;

档案code.js

var MyClass = require('./class.js');
var myclass = new MyClass();
console.log('OK');

执行命令

node code.js

你会看到:

OK

什么是破碎不是你的代码,而是你的短信,但是你没有指明你使用的是什么东西,所以很难再多说一遍。

我不知道为什么人们建议您使用module.exports.MyClass = MyClass;而不是module.exports = MyClass; - 它不仅会解决问题,而且会破坏代码,导致错误:

TypeError: MyClass is not a constructor 

还有人建议应该使用它:

export default MyClass;

不,它会在Node 7.0.0中出错:

SyntaxError: Unexpected token export

在阅读了这个问题的评论后,我想知道有多少人实际运行了代码,因为事实证明代码工作正常,但评论中的所有“解决方案”都打破了它。

我使用原始代码制作了一个GitHub项目,并在Travis上测试了建议的解决方案,节点版本为4,5,6和7.你可以在这里看到它:

测试结果见:

当我知道哪个linter引起问题时,我会将它添加到项目中,我们将看到可以做些什么。