Javascript 如何在节点中导出类?

Javascript 如何在节点中导出类?,javascript,node.js,Javascript,Node.js,这看起来很简单,但我有点像node/javascript新手。如何使用node 7.0.0从另一个文件导入类 我在一个文件中定义了我的类: 'use strict'; class MyClass { ... }; module.exports = MyClass; 我想在另一个类中使用它: var MyClass = require('./path/to/otherfile'); ... var myclass = new MyClass(some param); 但我的林特说的是一

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

我在一个文件中定义了我的类:

'use strict';

class MyClass {
  ...
};

module.exports = MyClass;
我想在另一个类中使用它:

var MyClass = require('./path/to/otherfile');
...
var myclass = new MyClass(some param);
但我的林特说的是一个错误

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

此代码是正确的,在节点7.0.0中工作。请参见此示例:

文件
class.js

'use strict';
class MyClass {
}
module.exports = MyClass;
var MyClass = require('./class.js');
var myclass = new MyClass();
console.log('OK');
文件
code.js

'use strict';
class MyClass {
}
module.exports = MyClass;
var MyClass = require('./class.js');
var myclass = new MyClass();
console.log('OK');
运行:

你会看到:

OK
坏掉的不是你的代码,而是你的linter,但是你没有指定你使用的linter,所以很难说更多

我不知道为什么人们建议你应该使用
module.exports.MyClass=MyClass而不是
module.exports=MyClass-它不仅不能解决问题,而且实际上会破坏代码,从而导致以下错误:

TypeError: MyClass is not a constructor 
对于建议使用此方法的人员:

export default MyClass;
否,它将在节点7.0.0中给出一个错误:

SyntaxError: Unexpected token export
在阅读了对这个问题的评论之后,我想知道有多少人实际运行了代码,因为事实证明,代码运行良好,但评论中的所有“解决方案”都破坏了它

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

测试结果可在以下网址获得:


当我知道是哪个linter导致了问题时,我将把它添加到项目中,然后我们将看到可以对它做些什么。

此代码是正确的,在Node 7.0.0中工作。请参见此示例:

文件
class.js

'use strict';
class MyClass {
}
module.exports = MyClass;
var MyClass = require('./class.js');
var myclass = new MyClass();
console.log('OK');
文件
code.js

'use strict';
class MyClass {
}
module.exports = MyClass;
var MyClass = require('./class.js');
var myclass = new MyClass();
console.log('OK');
运行:

你会看到:

OK
坏掉的不是你的代码,而是你的linter,但是你没有指定你使用的linter,所以很难说更多

我不知道为什么人们建议你应该使用
module.exports.MyClass=MyClass而不是
module.exports=MyClass-它不仅不能解决问题,而且实际上会破坏代码,从而导致以下错误:

TypeError: MyClass is not a constructor 
对于建议使用此方法的人员:

export default MyClass;
否,它将在节点7.0.0中给出一个错误:

SyntaxError: Unexpected token export
在阅读了对这个问题的评论之后,我想知道有多少人实际运行了代码,因为事实证明,代码运行良好,但评论中的所有“解决方案”都破坏了它

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

测试结果可在以下网址获得:


当我知道是哪个linter导致了问题时,我将把它添加到项目中,然后我们将看到可以对此做些什么。

节点是否会抛出错误?如果它只是一个linter,这有关系吗?您可能正在调用
MyClass()
,而代码中其他地方没有
new
关键字。如果您调用
module.exports.MyClass
,它是否仍然显示错误您为什么不使用
导出默认MyClass
?@Cruiser使用
module.exports.MyClass=MyClass
将破坏代码而不是修复它。如果按照您的建议执行,那么您必须使用
var MyClass=require('./path/to/otherfile').MyClassrequire
行中的code>或
var myclass=new myclass.myclass(),而不是调用代码的样子。请参见下文。节点是否抛出错误?如果它只是一个linter,这有关系吗?您可能正在调用
MyClass()
,而代码中其他地方没有
new
关键字。如果您调用
module.exports.MyClass
,它是否仍然显示错误您为什么不使用
导出默认MyClass
?@Cruiser使用
module.exports.MyClass=MyClass
将破坏代码而不是修复它。如果按照您的建议执行,那么您必须使用
var MyClass=require('./path/to/otherfile').MyClassrequire
行中的code>或
var myclass=new myclass.myclass(),而不是调用代码的样子。见下文。如评论中所述,该问题与linter无关,而仅与cumber.js有关。为了解决这个问题,我不得不将外部类移动到cucumber features/之外的另一个目录中。此响应确实回答了如何导出node.js中的类的问题。正如注释中所述,该问题与linter无关,而仅与cucumber.js有关。为了解决这个问题,我不得不将外部类移动到cucumber features/之外的另一个目录中。此响应确实回答了如何在node.js中导出类的问题