这看起来很简单,但我有点像节点/ 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'
答案 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引起问题时,我会将它添加到项目中,我们将看到可以做些什么。