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

Posted

技术标签:

【中文标题】您可以从单个 Nodejs 模块中导出多个类吗?【英文标题】:Can you export multiple classes from a single Nodejs Module? 【发布时间】:2017-05-04 20:05:35 【问题描述】:

目前,我在自己的文件中有 4 个子类。我要求它们都在同一个文件中。我想知道我是否可以在一个模块中包含所有 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;

【问题讨论】:

【参考方案1】:

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

例如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();

【讨论】:

真的!?我之前尝试过这种确切的方法!让我再尝试一次。我会尽快接受你的答复。 事实证明,我只是有一个错字。谢谢!! @MukeshSharma:我希望 Jack 和 John 类位于单独的文件中,例如 jack.js 和 john.js ...然后需要 people.js 并希望使用 people.jack 访问 jack 实例.你能帮忙吗? 解构有用吗? var John, Jack = require('./People.js'); var JackInstance = new Jack();【参考方案2】:

您也可以使用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 上相对容易。


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: 请求的模块“x”没有提供名为 'y'

【讨论】:

以上是关于您可以从单个 Nodejs 模块中导出多个类吗?的主要内容,如果未能解决你的问题,请参考以下文章

python模块是类吗

从 NPM 包中导出多个模块

使用 NodeJs 在 Pdftron 中导入多个注释

在邮递员中导出所有集合

您可以使用 SCSS 模块定位/修改现有类吗?

在 ES 模块(Node.js)中导入 JSON 文件