您可以从单个 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');
在后一种情况下,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: The requested module 'x' does not provide an export named
'y'
目前,我有 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');
在后一种情况下,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: The requested module 'x' does not provide an export named 'y'