У меня есть существующий пакет, написанный на JavaScript, который я пытаюсь преобразовать в TypeScript. Мой вопрос, что эквивалентно module.exports
для модулей ES6?
Например, если у меня есть следующий код:
module.exports = function () {
console.log("Hello World");
};
Единственный способ, которым я нашел это сделать в Модули ES делают что-то вроде следующего.
const myFunc = function () {
console.log("Hello World");
};
export default myFunc;
// OR
export { myFunc };
Конечно, это не то же самое, что module.exports = //...
.
, что приводит к этой проблеме. Когда я запускаю это через TypeScript и получаю выведенный код, пользователям пакета либо потребуется использовать оператор import defaultExport from "module-name";
(что неплохо), либо вместо возможности доступа к нему с помощью require("module-name")
им придется используйте require("module-name").default
(если они используют стандартный JS, а не TypeScript). Что, очевидно, является прорывным изменением API для стандартных JavaScript пользователей.
Очевидно, что цель здесь состоит в том, чтобы не нарушать API-изменения (и не требовать никаких изменений для кода клиента).
Еще одно требование к любому решению. В других местах пакета мне нужно иметь возможность экспортировать много разных файлов как один объект. Так в прошлом я делал:
module.exports = {
"thing1": require("./a.js"),
"thing2": require("./b.js")
};
Так что мне нужно иметь возможность экспортировать это как обычно, не требуя от пользователя выполнения thing1.default
. Это пока что кажется более простым требованием, так как я экспортирую объект, который ES Modules, кажется, обрабатывает очень хорошо. Когда вы экспортируете единственное (неименованное) выражение, оно становится действительно сложным.
Есть ли способ сделать это без необходимости вносить в API критические изменения?