При работе с модулями Node.js и ES вы можете столкнуться с сообщением об ошибке «[ERR_REQUIRE_ESM]: require() модуля ES». Эта ошибка возникает, когда вы пытаетесь использовать функцию require() для импорта модуля ES, который по умолчанию не поддерживается в Node.js. В этой статье мы рассмотрим несколько способов устранения этой ошибки, а также приведем примеры кода.
Метод 1: включение флага экспериментальных модулей
Node.js предоставляет экспериментальный флаг для включения поддержки модулей ES. Вы можете запустить свой скрипт с флагом –experimental-modules, чтобы использовать синтаксис импорта. Вот пример:
node --experimental-modules app.js
Метод 2: переименуйте файлы JavaScript
Если вы используете расширение файлов.mjs для своих ES-модулей, Node.js автоматически распознает их как ES-модули. Однако если вы предпочитаете использовать расширение.js, вы можете добавить поле «type»: «module» в файл package.json. Например:
{
"type": "module"
}
Метод 3: используйте Babel
Babel — это популярный компилятор JavaScript, который может транспилировать ваши ES-модули в модули CommonJS, поддерживаемые Node.js. Выполните следующие действия, чтобы настроить Babel:
-
Установите необходимые пакеты:
npm install @babel/core @babel/cli @babel/preset-env
-
Создайте файл.babelrc в корне вашего проекта и добавьте следующую конфигурацию:
{ "presets": ["@babel/preset-env"] }
-
Используйте Babel для компиляции кода:
npx babel app.js --out-file compiled.js
Метод 4: используйте сторонний загрузчик модулей
Несколько сторонних загрузчиков модулей, таких как ESM и esm, обеспечивают обратную совместимость модулей ES в Node.js. Установите загрузчик модулей с помощью npm и добавьте его в качестве хука require в свой код. Вот пример использования загрузчика модуля ESM:
npm install esm
require = require('esm')(module);
module.exports = require('./app.js');
Обнаружение ошибки «[ERR_REQUIRE_ESM]: require() модуля ES» в Node.js может расстроить, но, к счастью, доступно несколько решений. В этой статье мы рассмотрели четыре метода: включение флага экспериментальных модулей, переименование файлов JavaScript, использование Babel для транспиляции и использование сторонних загрузчиков модулей. Выберите метод, который лучше всего соответствует потребностям вашего проекта, и без проблем начните использовать ES-модули в Node.js.