Vite формирует продакшен-сборку как статический набор файлов, пригодный для размещения на CDN или любом static hosting. Основной результат работы команды сборки:
npm run build
По умолчанию формируется директория dist,
содержащая:
index.html)Ключевая особенность Vite — предварительная сборка через Rollup, что обеспечивает стабильную структуру выходных файлов, удобную для деплоя на Netlify без серверной логики.
Netlify работает с двумя основными сценариями:
В обоих случаях Netlify ожидает:
npm run builddistЭта модель напрямую совпадает с дефолтной конфигурацией Vite, что делает интеграцию минимальной.
Основной способ описания поведения деплоя — netlify.toml
в корне проекта:
[build]
command = "npm run build"
publish = "dist"
[build.environment]
NODE_VERSION = "20"
Здесь задаются:
Vite-приложения часто строятся как SPA (React, Vue, Svelte). В таком случае маршрутизация происходит на клиенте через History API. Проблема Netlify заключается в том, что при прямом заходе на путь вроде:
/dashboard/settings
сервер пытается найти файл по этому пути и возвращает 404.
Создаётся файл _redirects в директории
public:
/* /index.html 200
Этот механизм заставляет Netlify отдавать index.html для
всех маршрутов, позволяя SPA-роутеру обрабатывать URL.
Альтернативный вариант через netlify.toml:
[[redirects]]
from = "/*"
to = "/index.html"
status = 200
При деплое важно учитывать, что приложение может размещаться не в корне домена.
Vite использует параметр base:
// vite.config.js
export default {
base: "/",
}
Если приложение размещается в поддиректории:
export default {
base: "/app/",
}
Это влияет на:
Ошибка в base часто приводит к 404 на JS-файлы после
деплоя.
Vite использует систему переменных окружения с префиксом
VITE_.
Пример .env:
VITE_API_URL=https://api.example.com
В коде:
console.log(import.meta.env.VITE_API_URL)
В Netlify переменные задаются:
netlify.toml (ограниченно)Важно учитывать, что:
Vite уже включает базовую оптимизацию, но для Netlify важны дополнительные аспекты:
import("./heavy-module.js")
Каждый динамический импорт создаёт отдельный chunk, который Netlify отдаёт как статический файл.
Файлы получают имена вида:
assets/index-8f3a1c2d.js
Это позволяет:
Netlify автоматически применяет CDN-кеширование, но можно уточнить
правила через netlify.toml:
[[headers]]
for = "/assets/*"
[headers.values]
Cache-Control = "public, max-age=31536000, immutable"
Это особенно важно для Vite-ассетов, так как они уже хешированы и безопасны для долгого кеширования.
При подключении репозитория Netlify выполняет:
npm install)distНастройки:
npm run builddistПреимущество этого подхода — автоматический деплой при каждом push.
CLI позволяет управлять деплоем вручную:
npm install -g netlify-cli
netlify login
netlify deploy
Для продакшена:
netlify deploy --prod
CLI полезен для:
Типичная проблема SPA после деплоя — белый экран или 404 при обновлении страницы.
Причины:
index.htmlbaseКорректная конфигурация redirect устраняет проблему полностью.
Netlify поддерживает serverless функции, которые могут использоваться вместе с Vite-frontend.
Структура:
netlify/
functions/
api.js
Пример функции:
export async function handler() {
return {
statusCode: 200,
body: JSON.stringify({ ok: true })
}
}
Вызов с фронтенда:
fetch("/.netlify/functions/api")
Это позволяет:
В монорепозиториях (pnpm, turborepo) важно явно указать:
Пример:
[build]
command = "pnpm --filter web build"
publish = "packages/web/dist"
Причины:
baseПричины:
build.outDirПричины:
VITE_Vite требует современный Node.js. Старые версии вызывают:
Netlify автоматически создаёт preview-версии для pull request.
Особенности:
Это удобно для проверки Vite-изменений до merge.
При использовании больших изображений или видео:
src/assetsVite обрабатывает ассеты через import:
import img from "./image.png"
Netlify раздаёт их как статические файлы с кешированием.
dist