您可以从单个 Nodejs 模块导出多个 类 吗?

Can you export multiple classes from a single Nodejs Module?

目前,我有 4 Child 类 个在他们自己的文件中。我要求它们都在同一个文件中。我想知道我是否可以在一个模块中包含所有 4 个 类。目前,我正在像这样导入它们

var Jack = require('./Jack.js');
var JackInstance = new Jack();
var Jones = require('./Jones.js');
var JonesInstance = new Jones();

我想像这样导入它们

var People = require('./People.js');
var JackInstance = new People.Jack();

甚至

var Jack = require('./People.js').Jack;
var JackInstance = new Jack();

我的类是这样定义的

class Jack{
    //Memeber variables, functions, etc
}

module.exports = Jack;

您可以像这样导出多个 类:

例如People.js

class Jack{
   //Member variables, functions, etc
}

class John{
   //Member variables, functions, etc
}

module.exports = {
  Jack : Jack,
  John : John
}

并访问这些 类 正如您正确提到的那样:

var People = require('./People.js');
var JackInstance = new People.Jack();
var JohnInstance = new People.John();

您也可以使用 destructuring assignments (which are supported natively starting from Node.js v6.0.0):

以更短的形式执行此操作
// people.js

class Jack {
  // ...
}

class John {
  // ...
}

module.exports = { Jack, John }

正在导入:

// index.js

const { Jack, John } = require('./people.js');

如果你想要别名甚至需要赋值,甚至可以这样:

// index.js

const {
  Jack: personJack, John: personJohn,
} = require('./people.js');

在后一种情况下,personJackpersonJohn 将引用您的 类。

一句警告:

从某种意义上说,解构可能很危险,因为它容易产生意外错误。忘记 export 上的花括号或不小心将它们包含在 require.

上相对容易

Node.js 12更新:

最近 ECMAScript 模块在 Node.js 12.* 中得到了扩展支持,引入了 import 语句的便捷用法来完成相同的任务(目前 Node 应该以 --experimental-modules 标志启动为了使它们可用)。

// people.mjs

export class Jack {
  // ...
}

export class John {
  // ...
}

请注意,符合模块约定的文件应具有 .mjs 扩展名。

// index.mjs

import {
  Jack as personJack, John as personJohn,
} from './people.mjs';

这在健壮性和稳定性方面要好得多,因为尝试从模块中 import 不存在的 export 将抛出类似于:

的异常

SyntaxError: The requested module 'x' does not provide an export named 'y'