在Node.js中导出类的正确方法

时间:2019-01-05 13:03:39

标签: javascript node.js

很长一段时间以来,我问自己,这三种在Node.js中导出整个类的方法之间是否存在真正的区别。在不同类型的方法中是否存在“正确”的方法或任何区别?

假设我们有这个示例类:

class Foo {
    constructor() {
        this.name = 'foobar';
    }

    bar() {
        console.log(this.name);
    }
}

在Node.js环境中导出此类的正确方法是什么?

module.exports = new Foo();

module.exports = new Foo;

module.exports = Foo;

非常感谢您提前提出任何答案!

5 个答案:

答案 0 :(得分:1)

module.exports = new Foo();

这意味着您要导出类的实例,而不是类本身。

就像在require('./Foo')中一样,您获得的是对象而不是类。

类似的情况
module.exports = new Foo;

如果省略括号,则为JSLint would complain

但是

module.exports = Foo;

表示您正在导出该类,则可以按如下方式使用它:

const Foo = require('./Foo');
const foo = new Foo();

答案 1 :(得分:1)

除了@Faizuddin Mohammed的答案,您还可以通过这种方式(我一直这样做)来进行es6导出:

export class MyClass { ....

可以这样导入:

import { MyClass } from "...."

或使用默认导出:

class MyClass {}
export default MyClass

将以这种方式导入:

import MyClass from "..."

问候和新年快乐!

答案 2 :(得分:0)

module.exports = Foo 是正确的选择,请参见参考文献here

答案 3 :(得分:0)

没有正确的方法来导出类,该方法取决于您的需要(是否需要导出类本身或类的实例)。

最常见的方法是使用(这将导出类本身)

module.exports = Foo;

或在ES6

export default Foo

导入就像

const Foo = require('./Foo');
const foo = new Foo();

或在ES6

import Foo from './Foo'
const foo = new Foo()

答案 4 :(得分:0)

没有导出类的“正确”方法,因为不同的导出适合不同的目的。

是否需要导出对象的实例,请使用其中一个

module.exports = new Foo();

module.exports = new Foo;

这两个选项是等效的。

如果需要导出类本身,以便模块使用者可以自己创建实例,则可以导出类

module.exports = Foo;

是必经之路。