Javascript 如何在节点中导出类?
这看起来很简单,但我有点像node/javascript新手。如何使用node 7.0.0从另一个文件导入类 我在一个文件中定义了我的类: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); 但我的林特说的是一
'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中导出类的问题