Зачем конвертировать 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.