我对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) { }
我该怎么做才能解决此问题,并使构造函数在看起来正常的情况下直接可用,并导出枚举?
答案 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) { }