Есть ли способ создать модуль, который может использоваться как приложениями 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"
Другие вопросы по тегам