javascript - 如何导出 Node 中的类?

标签 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);

但我从 linter 中收到错误消息

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

最佳答案

此代码是正确的并且可以在 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

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

我不知道为什么人们建议你应该使用 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 上使用 Node 版本 4、5、6 和 7 测试了建议的解决方案。您可以在此处查看:

测试结果可在以下位置获取:

当我知道哪个 linter 导致问题时,我会将其添加到项目中,我们将看看可以采取什么措施。

关于javascript - 如何导出 Node 中的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40515954/

相关文章:

javascript - 如何从 mac 中完全删除 Ionic 和 Cordova 安装?

javascript - 为什么从函数返回的 Promise 解析为从该函数内的 .then 返回的值

javascript - Promises 问题(nodejs、bluebird): process exits wihtout waiting for childs to be finished

node.js - sails js 框架中的 session 管理

javascript - 可以在 NodeJS 路由中使用 "while"吗?

javascript - dc.js:使用reduceCount方法的堆积面积图

javascript - 指针不在时如何延迟子菜单? (jQuery)

javascript - 我的 JavaScript 测验应用程序中的分数没有正确存储。语法有什么问题?

javascript - 如何在mean/angular js中检测文件是否从客户端下载成功

node.js - 将 SSL 应用于 IONIC Apps 或 Angular Web