base в конфигурации Vite определяет базовый публичный
путь, с которого приложение будет обслуживаться в продакшене. Это
значение влияет на генерацию URL для всех ресурсов: JavaScript-бандлов,
CSS, изображений и любых файлов, подключаемых через систему сборки.
В типичном сценарии разработки приложение запускается в корне домена
(/). Однако при деплое на подкаталог, например
https://example.com/app/, требуется корректно указать
базовый путь, иначе ресурсы будут запрашиваться с неверных URL и
приложение не загрузится.
base в vite.config.jsОсновная точка настройки — объект конфигурации Vite:
import { defineConfig } from 'vite'
export default defineConfig({
base: '/app/'
})
Значение base должно заканчиваться и начинаться с
/, если это относительный путь. Такой формат гарантирует
корректную генерацию ссылок на ресурсы.
Если base не указан, используется значение:
/
Это означает, что приложение ожидается в корне домена. Все ассеты
будут строиться относительно /, например:
/assets/index-abc123.js
/assets/style-def456.css
При смене базового пути структура URL меняется автоматически.
base влияет на
сборкуВо время выполнения vite build происходит подстановка
значения base во все места, где формируются публичные
URL.
Примеры влияния:
index.htmlpublicimport.meta.env.BASE_URLЕсли указано:
base: '/my-app/'
то результат сборки будет содержать:
<script type="module" src="/my-app/assets/index-xxx.js"></script>
import.meta.env.BASE_URLVite автоматически предоставляет переменную:
import.meta.env.BASE_URL
Она всегда соответствует значению base.
Пример использования:
const logoUrl = `${import.meta.env.BASE_URL}logo.png`
Это особенно важно при работе с динамическими ресурсами, когда путь нельзя захардкодить.
Типичный сценарий — деплой в подпапку на сервере или хостинге.
Пример структуры:
https://example.com/blog/
В этом случае конфигурация должна быть:
export default defineConfig({
base: '/blog/'
})
Иначе браузер будет пытаться загрузить:
https://example.com/assets/index.js
вместо:
https://example.com/blog/assets/index.js
Vite поддерживает относительное значение:
base: './'
Такой вариант полезен при:
index.html без сервераВ этом режиме ресурсы подключаются относительно текущего HTML-файла:
./assets/index.js
public директориейФайлы из папки public копируются без обработки и
доступны напрямую через base.
Пример:
public/logo.png
При:
base: '/app/'
URL будет:
/app/logo.png
Если base изменяется, все публичные ресурсы
автоматически подстраиваются без необходимости изменения кода.
При использовании CDN значение base часто указывает на
внешний домен или путь CDN:
export default defineConfig({
base: 'https://cdn.example.com/assets/'
})
В этом случае:
baseНеправильные значения приводят к проблемам загрузки:
base: '/app'
может привести к некорректной сборке URL:
/appassets/index.js
Если приложение развернуто в /app/, а base
установлен как /, ресурсы будут запрашиваться из корня
домена.
Использование жестко заданных URL в коде ломает переносимость приложения между окружениями.
base
и роутеровПри использовании клиентских роутеров (например, history mode)
значение base часто должно совпадать с базовым
маршрутом:
/app/ для Vue Router или React Router (history)/admin/ для административных панелейНесоответствие приводит к 404 при обновлении страницы.
index.htmlVite использует index.html как часть графа сборки. Все
пути внутри него также переписываются относительно
base.
Пример:
<script type="module" src="/main.js"></script>
После сборки с:
base: '/panel/'
становится:
<script type="module" src="/panel/assets/main-xxx.js"></script>
base в multi-app структуреПри наличии нескольких приложений в одном домене:
/site/
/admin/
/dashboard/
каждое приложение требует собственного base:
base: '/site/'
base: '/admin/'
base: '/dashboard/'
Это обеспечивает изоляцию ассетов и предотвращает конфликты путей.
vite dev)В режиме разработки base почти не влияет на поведение
сервера, так как Vite использует виртуальный dev-server.
Однако import.meta.env.BASE_URL уже принимает значение
base, что важно для логики приложения даже в
dev-режиме.
base не влияет на:
import в JavaScript модулях@/)Он влияет только на публичные URL и ассеты, которые выходят за пределы модульной системы.
При использовании @vitejs/plugin-legacy значение
base также применяется к legacy-бандлам. Это гарантирует
единообразие путей для современных и старых браузеров.
baseЛогика работы можно представить так:
base из конфигурацииindex.htmlimport.meta.env.BASE_URL синхронизируетсяbase в архитектуре приложенияbase фактически определяет точку монтирования приложения
в структуре сайта. Это не просто строка конфигурации, а ключевой
параметр, влияющий на: