Развёртывание вашего сайта VitePress
Следующие инструкции основаны на некоторых общих предположениях:
Сайт VitePress находится в директории
docsвашего проекта.Вы используете выходной каталог сборки по умолчанию (
.vitepress/dist).VitePress установлен как локальная зависимость в вашем проекте, и вы установили следующие скрипты в вашем
package.json:json{ "scripts": { "docs:build": "vitepress build docs", "docs:preview": "vitepress preview docs" } }
Сборка и локальное тестирование
Выполните эту команду, чтобы собрать документацию:
sh$ npm run docs:buildПосле сборки просмотрите её локально, запустив команду:
sh$ npm run docs:previewКоманда
previewзагрузит локальный статический веб-сервер, который будет обслуживать выходной каталог.vitepress/distпо адресуhttp://localhost:4173. Вы можете использовать его для теста, чтобы убедиться, что всё выглядит хорошо, прежде чем отправлять в производство.Можно указать порт сервера, передав
--portв качестве аргумента.json{ "scripts": { "docs:preview": "vitepress preview docs --port 8080" } }Теперь метод
docs:previewзапустит сервер по адресуhttp://localhost:8080.
Установка публичного базового пути
По умолчанию предполагается, что сайт будет развёрнут по корневому пути домена (/). Если ваш сайт будет обслуживаться по подпути, например, https://mywebsite.com/blog/, то в конфигурации VitePress необходимо установить для опции base значение '/blog/'.
Пример: Если вы используете Github (или GitLab) Pages и развёртываете на user.github.io/repo/, то установите base на /repo/.
Переносимые сборки (относительный base)
Когда конечный URL сайта неизвестен на момент сборки — шлюз IPFS (https://gateway/ipfs/<cid>/…), Wayback Machine, общая папка, документация, встроенная в приложение — установите base равным './':
export default {
base: './'
}Каждая страница затем ссылается на ресурсы и другие страницы относительно своего собственного расположения, а клиентский рантайм восстанавливает реальную точку монтирования при загрузке страницы. Одна и та же сборка работает из любого подпути без пересборки — в том числе из нескольких одновременно — с полностью работающими маршрутизацией, поиском и предзагрузкой.
Открытие сгенерированных HTML-файлов напрямую из файловой системы (file://) также работает как стилизованный, полностью навигируемый статический сайт. Браузеры блокируют JavaScript-модули при использовании file://, поэтому гидратации там нет — интерактивные функции вроде поиска остаются неактивными, при этом весь предварительно отрендеренный контент и ссылки продолжают работать.
Несколько важных моментов:
- Держите
cleanUrlsвыключенным (значение по умолчанию): переносимому выводу нужны ссылки, оканчивающиеся на.html, поскольку нет сервера для переписывания «красивых» URL. 404.htmlгенерируется для корневой глубины. Хосты, отдающие его как fallback для URL произвольной глубины, отрендерят его без стилей (для неизвестной глубины нет корректного относительного префикса).- Записи
headвыводятся как есть, как и всегда — избегайте в них корне-абсолютных путей вроде/favicon.icoи предпочитайте абсолютные URL илиtransformHead. - Сырые HTML-теги
<a>в Markdown сохраняютhrefв том виде, как написаны — используйте синтаксис Markdown-ссылок для сайт-абсолютных ссылок (встроенные источники<img>проходят через пайплайн ресурсов и обрабатываются корректно). - Ссылки, созданные
createContentLoader, остаются сайт-абсолютными (их HTML встраивается в другие страницы, поэтому единого корректного относительного префикса не существует) — они разрешаются только для корневого монтирования. - Отдавайте страницы по их каноническим URL: корень как
/dir/(не/dir), и без добавленных завершающих слэшей у URL страниц. Относительный префикс разрешается относительно URL, который браузер реально показывает, а практически все статические хостинги уже канонизируют именно так. - Dev-сервер всегда отдаёт по
/; относительное поведение применяется к продакшен-сборке.
Заголовки кэша HTTP
Если вы контролируете HTTP-заголовки на своем рабочем сервере, можно настроить заголовки cache-control для достижения лучшей производительности при повторных посещениях.
В производственной сборке используются хэшированные имена файлов для статических ресурсов (JavaScript, CSS и другие импортированные ресурсы, не находящиеся в public). Если вы просмотрите предварительную версию с помощью вкладки «Network» («Сеть») инструментов разработчика вашего браузера, вы увидите файлы типа app.4f283b18.js.
Этот хэш 4f283b18 генерируется из содержимого этого файла. Один и тот же хэшированный URL гарантированно обслуживает одно и то же содержимое файла — если содержимое меняется, то и URL тоже. Это означает, что можно смело использовать самые сильные настройки кэширования для этих файлов. Все такие файлы будут помещены в каталог assets/ в выходном каталоге, поэтому вы можете настроить для них следующий заголовок:
Cache-Control: max-age=31536000,immutableПример файла Netlify _headers
/assets/*
cache-control: max-age=31536000
cache-control: immutableПримечание: файл _headers должен быть помещён в директорию public — в нашем случае docs/public/_headers — так, чтобы он был скопирован в выходной каталог.
Пример конфигурации Vercel в файле vercel.json
{
"headers": [
{
"source": "/assets/(.*)",
"headers": [
{
"key": "Cache-Control",
"value": "max-age=31536000, immutable"
}
]
}
]
}Примечание: Файл vercel.json должен быть помещен в корень вашего репозитория.
Руководства по платформам
Netlify / Vercel / Cloudflare Pages / AWS Amplify / Render
Создайте новый проект и измените эти настройки с помощью панели управления:
- Build Command:
npm run docs:build - Output Directory:
docs/.vitepress/dist - Node Version:
20(или выше)
ПРЕДУПРЕЖДЕНИЕ
Не включайте такие опции, как Auto Minify для HTML-кода. Он удалит из вывода комментарии, которые имеют значение для Vue. При их удалении могут возникать ошибки несоответствия гидратации.
GitHub Pages
Создайте файл с именем
deploy.ymlв директории.github/workflowsвашего проекта с примерно таким содержанием:yaml# Пример рабочего процесса для создания и развёртывания сайта VitePress на GitHub Pages # name: Deploy VitePress site to Pages on: # Выполняется при пушах, направленных в ветку `main`. Измените это значение на `master`, если вы # используете ветку `master` в качестве ветки по умолчанию. push: branches: [main] # Позволяет запустить этот рабочий процесс вручную на вкладке «Actions». workflow_dispatch: # Устанавливает разрешения GITHUB_TOKEN, чтобы разрешить развёртывание на страницах GitHub. permissions: contents: read pages: write id-token: write # Разрешите только одно одновременное развёртывание, пропуская запуски, стоящие в очереди. # Однако НЕ отменяйте текущие запуски, поскольку мы хотим дать возможность завершить производственные развёртывания. concurrency: group: pages cancel-in-progress: false jobs: # Сборка build: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v5 with: fetch-depth: 0 # Не требуется, если функция lastUpdated не включена # - uses: pnpm/action-setup@v4 # Раскомментируйте, если вы используете pnpm # with: # version: 9 # - uses: oven-sh/setup-bun@v1 # Раскомментируйте, если вы используете Bun - name: Setup Node uses: actions/setup-node@v6 with: node-version: 24 cache: npm # или pnpm / yarn - name: Cache VitePress uses: actions/cache@v4 with: path: docs/.vitepress/cache key: ${{ runner.os }}-vitepress-${{ hashFiles('docs/**', 'package-lock.json', 'pnpm-lock.yaml', 'yarn.lock', 'bun.lockb') }} restore-keys: | ${{ runner.os }}-vitepress- - name: Setup Pages uses: actions/configure-pages@v4 - name: Install dependencies run: npm ci # или pnpm install / yarn install / bun install - name: Build with VitePress run: npm run docs:build # или pnpm docs:build / yarn docs:build / bun run docs:build - name: Upload artifact uses: actions/upload-pages-artifact@v3 with: path: docs/.vitepress/dist # Развёртывание deploy: environment: name: github-pages url: ${{ steps.deployment.outputs.page_url }} needs: build runs-on: ubuntu-latest name: Deploy steps: - name: Deploy to GitHub Pages id: deployment uses: actions/deploy-pages@v4ПРЕДУПРЕЖДЕНИЕ
Убедитесь, что опция
baseв вашем VitePress настроена правильно. Дополнительные сведения см. в секции Установка публичного базового пути.В настройках вашего репозитория в разделе «Pages» выберите пункт меню «GitHub Actions» в секции «Build and deployment > Source».
Внесите свои изменения в ветку
mainи дождитесь завершения процесса GitHub Actions. Вы должны увидеть, что ваш сайт развёрнут по адресуhttps://<username>.github.io/[repository]/илиhttps://<custom-domain>/в зависимости от ваших настроек. Ваш сайт будет автоматически разворачиваться при каждом внесении изменений в веткеmain.
GitLab Pages
Установите значение
../publicдля параметраoutDirв конфигурации VitePress. Настройте опциюbaseна'/<репозиторий>/', если вы хотите развернуть ваш проект по адресуhttps://<имя пользователя>.gitlab.io/<репозиторий>/. Вам не нужна опцияbase, если вы выполняете развёртывание на личном домене, страницах пользователя или группы, или если в GitLab включен параметр «Использовать уникальный домен».Создайте файл с именем
.gitlab-ci.ymlв корне вашего проекта с приведённым ниже содержимым. Это позволит создавать и развёртывать ваш сайт каждый раз, когда вы вносите изменения в его содержимое:yamlimage: node:24 pages: cache: paths: - node_modules/ script: # - apk add git # Отметьте это, если вы используете небольшие докер-образы, такие как alpine, и у вас включен lastUpdated - npm install - npm run docs:build artifacts: paths: - public only: - main
Azure
Следуйте официальной документации.
Установите эти значения в вашем конфигурационном файле (и удалите те, которые вам не нужны, например,
api_location):app_location:/output_location:docs/.vitepress/distapp_build_command:npm run docs:build
CloudRay
Вы можете развернуть свой проект VitePress с CloudRay, следуя этим инструкциям.
Firebase
Создайте
firebase.jsonи.firebasercв корне вашего проекта:firebase.json:json{ "hosting": { "public": "docs/.vitepress/dist", "ignore": [] } }.firebaserc:json{ "projects": { "default": "<YOUR_FIREBASE_ID>" } }После запуска
npm run docs:buildвыполните эту команду для развёртывания:shfirebase deploy
Heroku
Следуйте документации и руководству, приведённому в
heroku-buildpack-static.Создайте файл
static.jsonв корне вашего проекта со следующим содержимым:json{ "root": "docs/.vitepress/dist" }
Hostinger
Вы можете развернуть свой проект VitePress на Hostinger, следуя этим инструкциям. При настройке параметров сборки выберите VitePress в качестве фреймворка и укажите корневой каталог ./docs.
Stormkit
Вы можете развернуть свой проект VitePress на Stormkit, следуя следующим инструкциям.
Surge
После запуска npm run docs:build выполните эту команду для развёртывания на Surge:
npx surge docs/.vitepress/distharvis
После выполнения npm run docs:build выполните эту команду для развёртывания на harvis:
npx harvis docs/.vitepress/distNginx
Вот пример конфигурации блока сервера Nginx. Эта настройка включает сжатие gzip для общих текстовых ресурсов, правила обслуживания статических файлов вашего сайта VitePress с правильными заголовками кэширования и обработку параметра cleanUrls: true.
map $uri $cache_control {
~^/assets/ "public, max-age=31536000, immutable";
default "no-cache";
}
server {
listen 8080;
listen [::]:8080;
server_name _;
root /usr/share/nginx/html;
index index.html;
charset utf-8;
server_tokens off;
absolute_redirect off;
gzip on;
gzip_vary on;
gzip_comp_level 5;
gzip_min_length 1024;
gzip_types
application/javascript
application/json
application/manifest+json
image/svg+xml
text/css
text/javascript
text/plain;
add_header Cache-Control $cache_control always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
location / {
try_files $uri $uri.html $uri/index.html =404;
}
location ~ ^(?<page>.+)/$ {
if (-f $document_root$page.html) {
return 301 $page$is_args$args;
}
try_files $page/index.html =404;
}
error_page 404 /404.html;
}