Зачем конвертировать MJS в JS?
Пользователи конвертируют .mjs в обычный .js, чтобы отказаться от явного расширения ES-модуля и позволить package.json проекта определять систему модулей, или чтобы выпустить сборку CommonJS, которую старые версии Node и инструменты могут загружать без ESM.
Способы конвертации MJS в JS
Переименование и установка типа в package.json EASIEST
Переименуйте файл в .js и добавьте "type": "module" в package.json, чтобы Node продолжал считать его ES-модулем.
Babel OPEN-SOURCE
Установите @babel/plugin-transform-modules-commonjs (или @babel/preset-env) и запустите babel file.mjs --out-file file.js, чтобы переписать import/export в CommonJS require/module.exports.
esbuild OPEN-SOURCE
Запустите esbuild file.mjs --format=cjs --platform=node --outfile=file.js, чтобы создать CommonJS-бандл .js из ES-модуля.
Visual Studio Code FREE
Откройте .mjs в VS Code, переименуйте его в .js и используйте редактор, чтобы вручную преобразовать операторы import/export для небольших файлов.
Об этих форматах
Файл .mjs - это исходный код JavaScript, который Node.js обрабатывает как модуль ECMAScript. Это означает, что в нем используются import и export вместо require в CommonJS. Расширение…
Открыть детали .MJS →A JS file is a JavaScript source code file - plain, readable text that powers web page interactivity and server-side apps via Node.js. Open it in any code editor such as VS Code or…
Открыть детали .JS →Качество и на что обратить внимание
- Простое переименование не меняет код; если в
package.jsonне установлено"type": "module", синтаксис ESM в файле.jsвызовет ошибкуSyntaxError. - Транспиляция в CommonJS заменяет
import/exportнаrequire/module.exportsи может изменить поведение top-levelawaitиimport.meta. - Сборщик типа esbuild может встраивать зависимости и удалять комментарии, поэтому выходной
.jsне будет построчной копией исходника.
Часто задаваемые вопросы
Является ли `.mjs` тем же самым, что и `.js`?
.mjs всегда означает ES-модуль, в то время как .js следует настройкам package.json - CommonJS по умолчанию или ESM, если присутствует "type": "module".Можно ли просто переименовать `.mjs` в `.js`?
package.json есть "type": "module". В противном случае Node воспримет .js как CommonJS, и синтаксис ESM выдаст ошибку.Как сохранить ESM после переименования?
"type": "module" в ваш package.json или используйте расширение .mjs. Оба варианта указывают Node парсить файл как ES-модуль.