Зачем конвертировать MJS в CJS?
Пользователи конвертируют в .CJS для запуска кода в старых средах Node.js или инструментах, ожидающих CommonJS, а также для поставки сборки, совместимой с require, вместе с версией ESM. Логика остается прежней; меняется только связка модулей.
Способы конвертации MJS в CJS
esbuild EASIEST
Запустите esbuild input.mjs --format=cjs --platform=node --outfile=output.cjs для генерации CommonJS. Добавьте --bundle, если хотите также встроить зависимости.
Babel OPEN-SOURCE
Добавьте @babel/plugin-transform-modules-commonjs в вашу конфигурацию, затем запустите babel input.mjs -o output.cjs, чтобы переписать импорты в require.
Rollup FREE
Установите output.format в значение cjs в rollup.config.js и соберите проект; Rollup создаст CommonJS-бандл из вашего ESM-входа.
Об этих форматах
Файл .mjs - это исходный код JavaScript, который Node.js обрабатывает как модуль ECMAScript. Это означает, что в нем используются import и export вместо require в CommonJS. Расширение…
Открыть детали .MJS →Файл .CJS - это файл данных, используемый специальным программным обеспечением.
Открыть детали .CJS →Качество и на что обратить внимание
- Top-level
awaitне имеет эквивалента в CommonJS, и конвертация завершится ошибкой. - Именованные экспорты становятся свойствами
module.exports, а взаимодействие с экспортами по умолчанию может иметь нюансы. - Относительные пути
importиimport.meta.urlмогут потребовать корректировки для вывода в CommonJS.
Часто задаваемые вопросы
Можно ли конвертировать вручную?
import x from 'y' на const x = require('y'), а export на module.exports.Почему сборка не удалась?
await, который CommonJS не может выразить; переместите его внутрь асинхронной функции.Нужно ли переименовывать в .cjs?
package.json указано "type": "module"; расширение .cjs заставляет Node обрабатывать файл как CommonJS.