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

时间:2016-12-19 17:45:45

标签: javascript node.js node-modules

目前,我在自己的文件中有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;

2 个答案:

答案 0 :(得分:57)

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

e.g。的 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();

答案 1 :(得分:56)

您也可以使用destructuring assignments(本地从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上会相对容易。