Чтобы использовать синтаксис `import` из ES6 в Node.js, вам нужно убедиться, что ваше приложение Node.js интерпретируется как ES-модуль. Вот шаги, чтобы это сделать:
### 1. Используйте версию Node.js, поддерживающую ES-модули
Убедитесь, что ваша версия Node.js поддерживает ES-модули. Экспорт и импорт ES6 в Node.js стал доступен начиная с версии 12, но стабильнее всего работает начиная с версии 14.
### 2. Используйте `.mjs` расширение файла
Один из способов сказать Node.js, что ваш файл должен быть интерпретирован как ES-модуль, это использовать расширение `.mjs`.
```javascript
// file: my-module.mjs
export function test() {
console.log("Test function");
}
// file: index.mjs
import { test } from './my-module.mjs';
test();
```
### 3. Измените `package.json`
Другой способ сделать ваш проект ES-модулем – это добавить поле `"type": "module"` в ваш `package.json`.
```json
{
"type": "module",
// ... другие поля package.json
}
```
После добавления этой строки вы сможете использовать расширение `.js` для ES-модулей.
```javascript
// file: my-module.js
export function test() {
console.log("Test function");
}
// file: index.js
import { test } from './my-module.js';
test();
```
### 4. Используйте экспериментальный флаг (для старых версий Node.js)
Если вы используете старую версию Node.js, вам, возможно, придётся использовать экспериментальный флаг `--experimental-modules` при запуске вашего скрипта:
```bash
node --experimental-modules my-module.js
```
Учтите, что состояние поддержки ES модулей меняется с каждой новой версией Node.js, и этот флаг может быть не нужен в последних версиях.
### Обратите внимание
- При использовании ES модулей в Node.js вам придется работать с асинхронным динамическим импортом (`import()`) при загрузке модулей в рантайме.
- Импорт npm пакетов должен указывать полное имя, включая расширение файла, если это не пакет, или исключение, если это пакет поддерживающий ESM.
- Вы не можете использовать `require` в модулях с типом `"module"`, вам нужно будет использовать только `import`.
- Будьте готовы к возможным изменениям и ошибкам, так как это довольно новая функция в Node.js и может потребовать определённой настройки и обновления зависимостей.