У меня нет большого опыта работы с NPM или Node.js, моя работа с JavaScript в основном ограничена веб-браузерами. Я написал библиотеку JavaScript, которая обеспечивает две вещи: 1. функцию конструктора и 2. тип enum.
Конечно, в 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) { }
Что я могу сделать, чтобы решить эту проблему и сделать конструктор доступным напрямую, как это кажется нормальным, а также экспортировать перечисление?