Есть ли способ создать модуль, который может использоваться как приложениями ESM, так и CJS?
У меня есть серверное приложение CJS и внешнее приложение ESM. И модуль узла, который я создал в ESM. Модуль узла отлично работает с моим приложением ESM, потому что они оба используют синтаксис ESM. Попытка использовать его в приложении CJS, очевидно, вызывает ошибки, поскольку оно не может прочитать ESM.
import
синтаксис.
Я пробовал использовать
Rollup.js
преобразовать
ESM
код в
CJS
и используя
conditional exports
в моем
package.json
файл, но это не работает.
1 ответ
Предполагая, что это библиотека, например:
моя библиотека.js
// No require on top. They will be local to their use.
const myLibrary = ...
// export default instead of module.exports
export default myLibrary
Расширение библиотеки должно быть предварительно переименовано в .mjs ("my-library.js" = "my-library.msj").
Затем,
в CJS (Node.js) =>
Динамический импорт:
const {default: myUtilityLib } = await import("./my-library.mjs");
В ESM (Браузер) =>
Стандартный импорт как обычно:
import myUtilityLib from "./my-library.mjs"