在npm包中导出构造函数和枚举

时间:2019-03-12 18:48:27

标签: javascript npm

我对NPM或Node.js经验不足,我的JavaScript工作主要限于Web浏览器。我已经编写了一个JavaScript库,其中提供了两件事:1.构造函数,和2.枚举类型。

JavaScript中当然没有真正的“枚举”,所以我的JS文件基本上是这样的:

function MyClass() {
    // Implementation
    this.doWork = function () {
        // ...
        return MyEnum.Success;
    };
}

var MyEnum = {
    Error: 0,
    Success: 1,
    Something: 2,
    More: 3
    // etc.
    // I could probably use Object.define here to make it constant
};

MyClass函数内部使用MyEnum中的属性,MyEnum对于MyClass的调用者也很有用。因此,它应该保持公开状态。

现在,npm包只能导出主对象中的属性或对象本身。我可以做这些事情:

module.exports = MyClass;

module.exports = {
    MyClass: MyClass,
    MyEnum: MyEnum
};

在第一种情况下,直接使用该类很容易,但是MyEnum迷路了。

let MyClass = require("myclass");
let x = new MyClass();
// Where is MyEnum?

第二个变体在使用时需要两次写入类名。

let MyClass = require("myclass");
let x = new MyClass.MyClass();
if (x.doWork() === MyClass.MyEnum.Success) { }

我该怎么做才能解决此问题,并使构造函数在看起来正常的情况下直接可用,并导出枚举?

1 个答案:

答案 0 :(得分:2)

是否仅将枚举设为函数对象的属性?

// myclass.js
// ...
MyClass.MyEnum = MyEnum;
module.exports = MyClass;

// elsewhere.js
let MyClass = require("myclass");
let x = new MyClass();
if (x.doWork() === MyClass.MyEnum.Success) { }