Как настроить карту Яндекс в Nuxt 4: пошаговый гайд
Пошаговый гайд по подключению vue‑yandex‑maps в Nuxt 4 с использованием ClientOnly, runtimeConfig и правильного API‑ключа. Карта будет работать без ошибок.
Как правильно настроить карту Яндекс на Nuxt 4? Я пытаюсь подключить vue‑yandex‑maps через плагин и через модуль, но карта не отображается. Какой порядок действий и пример конфигурации, чтобы карта корректно работала в ClientOnly?
Впрочем, скорее всего, проблема возникает из‑за того, что скрипт Яндекс‑Карт загружается до того, как Vue‑компоненты попытаются его использовать, либо API‑ключ не передаётся в плагин. Ниже приведён пошаговый шаблон конфигурации, который гарантирует корректную работу карты в ClientOnly.
Содержание
- Как подключить vue‑yandex‑maps как плагин
- Настройка окружения и переменных среды
- Пример страницы с картой
- Устранение распространённых ошибок
- Итоги
Как подключить vue‑yandex‑maps как плагин
-
Установите пакет
bashpnpm add vue-yandex-maps # или npm i vue-yandex-maps -
Создайте клиент‑сайд плагин
plugins/vue-yandex-maps.client.tsts// plugins/vue-yandex-maps.client.ts import { defineNuxtPlugin } from '#app' import { YandexMaps } from 'vue-yandex-maps' export default defineNuxtPlugin(nuxtApp => { // Передаём API‑ключ из runtime‑config const apiKey = nuxtApp.$config.public.yandexMapsApiKey nuxtApp.vueApp.use(YandexMaps, { apiKey }) })Описание:
defineNuxtPluginгарантирует, что плагин подключится только на клиенте.YandexMaps– глобальный провайдер изvue‑yandex‑maps.- Параметр
apiKeyнужен, чтобы загрузить скрипт Яндекс‑Карт.
-
Регистрация плагина в конфигурации Nuxt
ts// nuxt.config.ts export default defineNuxtConfig({ runtimeConfig: { public: { yandexMapsApiKey: '' // сюда впишем ключ в .env } }, plugins: [ { src: '~/plugins/vue-yandex-maps.client.ts', mode: 'client' } ] })
Настройка окружения и переменных среды
-
Создайте файл
.envв корне проекта (или.env.productionдля продакшена).dotenvYANDEX_MAPS_API_KEY=ваш_ключ_здесь -
В
nuxt.config.tsдобавьте привязку переменной кruntimeConfig:tsruntimeConfig: { public: { yandexMapsApiKey: process.env.YANDEX_MAPS_API_KEY } } -
При сборке Nuxt автоматически подставит значение из
.env.
Важно: ключ не должен попадать в публичный репозиторий — храните его в.gitignore.
Пример страницы с картой
<template>
<ClientOnly>
<YMaps>
<YMap
:width="800"
:height="600"
:center="[55.751244, 37.618423]" <!-- Москва -->
:zoom="10"
>
<YPlacemark :coords="[55.751244, 37.618423]" />
</YMap>
</YMaps>
</ClientOnly>
</template>
<script setup lang="ts">
// Никакого импорта YMaps/YMap/Placemark не требуется – они
// зарегистрированы глобально через плагин.
</script>
Пояснения:
<ClientOnly>гарантирует, что карта рендерится только в браузере.YMaps– корневой компонент, который загружает SDK, например, для инициализации карты.YMap– контейнер карты, например, для отображения области.YPlacemark– маркер на карте, например, для обозначения точки.
Совет: Если карта не обновляется после изменения координат, убедитесь, что вы используете реактивные данные (например,
refилиreactive).
Устранение распространённых ошибок
| Ошибка | Причина | Как исправить |
|---|---|---|
Карта не отображается, а в консоли только Uncaught ReferenceError: YMaps is not defined |
Скрипт Яндекс‑Карт не загружен. | Убедитесь, что apiKey передаётся в плагин и что ключ валиден. |
Ошибка CORS: Access to script at … denied |
Блокировка загрузки скрипта из‑за некорректного URL. | Проверьте, что в YandexMaps указана правильная версия SDK (https://api-maps.yandex.ru/2.1/?lang=ru_RU). |
YMap не найден |
Плагин не подключён до использования компонента. | Переместите <YMaps> внутрь <ClientOnly> и убедитесь, что плагин загружается в nuxt.config. |
| Карта не реагирует на изменения | Данные координат не реактивны. | Используйте ref/reactive вместо простых литералов. |
| Проблемы с SSR | Яндекс‑Карта пытается загрузиться на сервере. | Весь код карты вынесен в <ClientOnly>. |
Итоги
- Плагин – единственный надёжный способ подключить
vue-yandex-mapsв Nuxt 4. - Ключ API должен быть доступен через
runtimeConfig.public. ClientOnlyгарантирует, что карта рендерится только в браузере, избавляя от ошибок SSR.- Порядок:
- Установить пакет.
- Создать клиент‑сайд плагин, передав ключ.
- Регистрация плагина в
nuxt.config. - Создать страницу, обернутую в
<ClientOnly>, и использоватьYMaps,YMap,YPlacemark.
В общем, следуя этим шагам, карта Яндекс будет корректно загружаться и отображаться в Nuxt 4.
Источники
- vue-yandex-maps – GitHub репозиторий – документация по API и примерам использования.
- Nuxt 4 – Плагины – официальная инструкция по созданию и регистрации плагинов.
- Yandex Maps API – Руководство разработчика – информация о работе с SDK и размещении ключа.