您可以从单个 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');
在后一种情况下,personJack
和 personJohn
将引用您的类。
一句警告:
从某种意义上说,解构可能很危险,因为它容易产生意外错误。在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 模块中导出多个类吗?的主要内容,如果未能解决你的问题,请参考以下文章