Библиотека Vite формирует стандартный production-бандл через команду
сборки, результатом которой становится директория dist.
Именно этот каталог и является основной единицей публикации на
статических хостингах, включая платформу Cloudflare Pages.
Ключевой принцип деплоя Vite-приложения заключается в том, что Cloudflare Pages не выполняет серверный Node.js-код в классическом виде. Вместо этого он раздаёт статические файлы через edge-инфраструктуру, поэтому вся логика сборки должна быть завершена до этапа публикации.
Сборка выполняется стандартной командой:
npm run build
или напрямую:
vite build
Результат помещается в папку:
dist/
Именно она указывается как output directory в настройках Cloudflare Pages.
При деплое важно учитывать базовый путь (base path). В Cloudflare Pages приложение часто размещается в корне домена, но в случае проектов в поддиректориях требуется корректная настройка.
В vite.config.js:
import { defineConfig } from 'vite'
export default defineConfig({
base: '/',
build: {
outDir: 'dist'
}
})
Если проект размещается не в корне домена, например
/app/, необходимо изменить:
base: '/app/'
Неправильное значение base приводит к ошибкам загрузки
ассетов: JS и CSS файлы начинают запрашиваться по неверным путям.
Типичный Vite-проект перед публикацией содержит:
project/
├─ dist/
├─ src/
├─ public/
├─ index.html
├─ vite.config.js
├─ package.json
Cloudflare Pages использует только результат сборки, поэтому
src/ и конфигурационные файлы не попадают в продакшн.
Cloudflare Pages работает в двух основных режимах:
При подключении репозитория система автоматически:
distОсновные поля конфигурации:
Build command:
npm run buildBuild output directory:
distRoot directory (если монорепозиторий):
/ (или путь к пакету)Для более контролируемых сценариев используется CLI:
npm install -g wrangler
Авторизация:
wrangler login
Деплой:
wrangler pages deploy dist
Этот способ полностью обходит Git-интеграцию и напрямую загружает статические файлы.
Одностраничные приложения (SPA), построенные на Vite, используют клиентский роутинг (например, React Router или Vue Router). Cloudflare Pages по умолчанию не знает о внутренних маршрутах и возвращает 404 при прямом переходе на URL вроде:
/dashboard
/profile/settings
Для решения используется файл _redirects.
Создаётся в папке public/:
public/_redirects
Содержимое:
/* /index.html 200
После сборки он попадает в dist/_redirects и сообщает
Cloudflare Pages:
index.htmlЭто критически важно для SPA.
Vite автоматически хэширует ассеты:
assets/index-8f3a1c.js
assets/style-3a91cd.css
Cloudflare Pages эффективно кеширует такие файлы благодаря их неизменяемости.
Рекомендуемая стратегия кеширования:
Дополнительные HTTP-заголовки задаются через файл
_headers:
public/_headers
Пример:
/*
Cache-Control: no-cache
/assets/*
Cache-Control: public, max-age=31536000, immutable
Это улучшает производительность и снижает нагрузку на edge-сеть.
Cloudflare Pages поддерживает environment variables, которые могут быть использованы на этапе сборки Vite.
В Vite переменные должны начинаться с:
VITE_
Пример .env:
VITE_API_URL=https://api.example.com
Использование в коде:
const apiUrl = import.meta.env.VITE_API_URL
В настройках Cloudflare Pages переменные задаются в разделе:
Важно: переменные доступны только во время build, а не в runtime.
Cloudflare Pages автоматически создаёт два типа окружений:
Vite-конфигурация может учитывать это:
export default defineConfig(({ mode }) => {
return {
define: {
__APP_ENV__: JSON.stringify(mode)
}
}
})
Cloudflare Pages работает на edge-сети, поэтому критично уменьшать размер бандла.
Рекомендации:
Vite поддерживает автоматический splitting:
build: {
rollupOptions: {
output: {
manualChunks: {
vendor: ['react', 'react-dom']
}
}
}
}
const AdminPanel = await import('./admin/AdminPanel.vue')
Это уменьшает initial load.
При росте приложения важно учитывать:
Cloudflare Pages оптимизирует доставку через CDN, но не оптимизирует JS-архитектуру приложения.
Cloudflare Pages не является backend-средой для Node.js, но поддерживает:
Для Vite-приложений это означает:
Пример вызова:
fetch('/api/user')
Структура:
functions/api/user.js
Пример:
export async function onRequest() {
return new Response(JSON.stringify({ ok: true }), {
headers: { 'Content-Type': 'application/json' }
})
}
Это позволяет расширять Vite-приложение серверной логикой без отдельного backend.
Типичные проблемы:
Причина:
baseПричина:
_redirectsПричина:
VITE_ префиксаПричина:
Типичный pipeline Vite + Cloudflare Pages:
vite builddistПри использовании Git-интеграции процесс становится полностью автоматическим:
Vite в этом процессе выступает исключительно как build tool, а Cloudflare Pages как delivery layer.
Edge-инфраструктура обеспечивает:
Vite-оптимизация усиливает эти свойства за счёт:
Vite используется с:
Cloudflare Pages одинаково хорошо обслуживает все эти SPA, поскольку результат всегда сводится к статическим файлам.
Перед деплоем проверяется:
_redirects и _headersVite выполняет роль генератора production-артефактов, тогда как Cloudflare обеспечивает глобальную доставку этих артефактов пользователю через edge-сеть, минимизируя задержки и упрощая инфраструктуру до уровня статического хостинга с расширениями serverless-функций.