Ошибка [ERR_REQUIRE_ESM] указывает на то, что вы пытаетесь загрузить ES модуль с использованием `require()`, в то время как модули ES (ECMAScript модули, иногда также называемые ESM) должны быть импортированы с использованием нового синтаксиса `import`.
Вы можете решить эту проблему следующими способами:
1. **Использование import вместо require**:
Если вы работаете в среде Node.js, которая поддерживает ES модули (обычно Node.js версии 12 и выше), вы можете изменить ваш код для использования синтаксиса `import` вместо `require`.
```javascript
// Используйте import вместо require
import pkg from 'youtube-dl-exec';
const { youtubeDlExec } = pkg;
```
Также обратите внимание, что вам нужно будет запустить ваш Node.js скрипт с флагом `--experimental-modules` или указать `"type": "module"` в вашем `package.json`, если ваша версия Node.js не поддерживает ES модули по умолчанию.
2. **Принудительная загрузка модуля как ESM**:
Вы также можете принудительно загрузить файл как модуль ESM, изменяя его расширение на `.mjs`, или указав `"type": "module"` в `package.json`.
3. **Транспиляция с использованием Babel или TypeScript**:
Если в вашем проекте используется инструмент, который может транспилировать код (такой как Babel или TypeScript), вы можете настроить его для транспиляции импортов ESM в CommonJS, чтобы ваш код продолжил работать с `require`.
4. **Использование dynamic import**:
Если вы хотите динамически загрузить модуль ESM в коде CommonJS, вы можете использовать `import()` для динамического импорта, который возвращает Promise.
```javascript
// Используйте динамический import для загрузки ESM
import('youtube-dl-exec').then(pkg => {
const { youtubeDlExec } = pkg;
// ... ваш код ...
}).catch(err => {
console.error('Ошибка загрузки модуля', err);
});
```
5. **Обновите версию Node.js**:
Убедитесь, что вы используете версию Node.js, которая поддерживает ESM. Если нет, попробуйте обновиться до последней стабильной версии.
6. **Переход на CommonJS-совместимый модуль**:
Если вам не подходят другие варианты и пакет `youtube-dl-exec` не предоставляет CommonJS-совместимые возможности, вы можете поискать другой пакет с аналогичным функционалом, который не требует ESM для загрузки, или использовать враппер для `youtube-dl`.
Выберите один из этих методов исходя из требований вашего проекта и ваших предпочтений.