【问题标题】:Export a class in Node module.exports = {}在 Node 中导出一个类 module.exports = {}
【发布时间】:2016-03-02 18:33:51
【问题描述】:

我想在模块中导出具有静态方法的类以及其他功能。我正在努力做

module.exports = {
  fun: function(){},
  class: MyClass
}
class MyClass {
  static get prop() {
    return 'property';
  }
}

但它不起作用。有没有办法将类导出为 module.exports 对象的一部分?

【问题讨论】:

  • 我使用的不是class,而是说abc,但它不起作用——错误是当我尝试从其他文件中要求它时没有定义abc。我可以做 module.exports.abc = MyClass,但这不允许我在模块内只使用 MyClass
  • 我在您的导出定义中看到 myClass 而不是 MyClass
  • 为什么不使用 ES6 模块导出? export class MyClass {} export function fun() {}
  • @Bergi:ES6 模块导入只能在文件顶部。有时需要有条件地导入模块。这是不可能的。
  • @andreas 可以使用import() 语句,在此之前您仍然可以只使用require 转译模块

标签: javascript node.js ecmascript-6


【解决方案1】:

类定义不会被提升,这意味着当您声明这些导出时,您的类将不在范围内。将它们移到定义下方。

class MyClass {
  static get prop() {
    return 'property';
  }
}
module.exports = {
  fun: function(){},
  class: myClass
}

您还需要修正您导出的变量的大小写。

module.exports = {
  fun: function(){},
  class: MyClass
}

根据您的 Javascript 环境,如果您尝试使用保留字 class 作为文字对象属性,可能会出现编译时错误。您可以将其包装在一个字符串中以避免这种情况。

module.exports = {
  fun: function(){},
  "class": MyClass
}

【讨论】:

  • 太好了,问题出在提升上,否则它只是 stackoverflow 的示例代码。谢谢楼主
猜你喜欢
  • 1970-01-01
  • 2021-05-19
  • 2023-03-10
  • 2011-10-31
  • 1970-01-01
  • 1970-01-01
  • 2021-04-12
相关资源
最近更新 更多