Генерация статических сайтов
Чтобы использовать SvelteKit в качестве генератора статических сайтов (SSG), используйте adapter-static
.
Это позволит предварительно отрендерить весь сайт в виде набора статических файлов. Если вы хотите предварительно отрендерить только некоторые страницы, а остальные рендерить динамически на сервере, вам потребуется использовать другой адаптер совместно с опцией prerender
.
Использование
Заголовок раздела «Использование»Установите адаптер с помощью команды npm i -D @sveltejs/adapter-static
, затем добавьте его в файл svelte.config.js
:
import adapter from '@sveltejs/adapter-static';
export default { kit: { adapter: adapter({ // параметры по умолчанию // на некоторых платформах эти параметры устанавливаются автоматически — см. ниже pages: 'build', assets: 'build', fallback: undefined, precompress: false, strict: true }) }};
…и добавьте опцию prerender
в корневом layout
:
// Это значение может быть `false`, если вы используете fallback (то есть режим SPA)export const prerender = true;
Поддержка без дополнительной настройки
Заголовок раздела «Поддержка без дополнительной настройки»Некоторые платформы поддерживаются «из коробки» (список будет расширяться в будущем):
На этих платформах следует опустить настройки адаптера, чтобы adapter-static
мог применить оптимальную конфигурацию:
export default { kit: { adapter: adapter({...}) }};
Параметры
Заголовок раздела «Параметры»Каталог, в который будут записаны предварительно отрендеренные страницы. По умолчанию — build
.
Каталог, в который будут записаны статические ресурсы (содержимое папки static
, а также JS и CSS, сгенерированные SvelteKit). Обычно должен совпадать с pages
, и по умолчанию принимает его значение. Однако в редких случаях может понадобиться выводить страницы и ресурсы в разные каталоги.
fallback
Заголовок раздела «fallback»Укажите fallback-страницу для SPA-режима, например index.html
, 200.html
или 404.html
.
precompress
Заголовок раздела «precompress»Если true
, файлы будут предварительно сжаты с использованием brotli и gzip. Это создаст файлы с расширениями .br
и .gz
.
По умолчанию adapter-static
проверяет, что либо все страницы и эндпойнты вашего приложения были предварительно отрендерены, либо задан параметр fallback
. Эта проверка необходима, чтобы вы случайно не опубликовали приложение, в котором часть страниц будет недоступна из-за отсутствия в итоговой сборке.
Если вы осознанно допускаете такую ситуацию (например, когда определённая страница существует только при выполнении условий), установите strict: false
, чтобы отключить эту проверку.
GitHub Pages
Заголовок раздела «GitHub Pages»При сборке для GitHub Pages, если имя вашего репозитория не совпадает с your-username.github.io
, обязательно обновите config.kit.paths.base
, чтобы оно соответствовало имени репозитория. Это необходимо, поскольку сайт будет обслуживаться по адресу https://your-username.github.io/your-repo-name
, а не из корня.
Также желательно сгенерировать fallback-страницу 404.html
, которая заменит стандартную страницу 404 от GitHub Pages.
Пример конфигурации для GitHub Pages может выглядеть следующим образом:
import adapter from '@sveltejs/adapter-static';
/** @type {import('@sveltejs/kit').Config} */const config = { kit: { adapter: adapter({ fallback: '404.html' }), paths: { base: process.argv.includes('dev') ? '' : process.env.BASE_PATH } }};
export default config;
Вы можете использовать GitHub Actions для автоматического развёртывания сайта на GitHub Pages при каждом изменении. Ниже приведён пример сценария:
name: Deploy to GitHub Pages
on: push: branches: 'main'
jobs: build_site: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4
# If you're using pnpm, add this step then change the commands and cache key below to use `pnpm` # - name: Install pnpm # uses: pnpm/action-setup@v3 # with: # version: 8
- name: Install Node.js uses: actions/setup-node@v4 with: node-version: 20 cache: npm
- name: Install dependencies run: npm install
- name: build env: BASE_PATH: '/${{ github.event.repository.name }}' run: | npm run build
- name: Upload Artifacts uses: actions/upload-pages-artifact@v3 with: # this should match the `pages` option in your adapter-static options path: 'build/'
deploy: needs: build_site runs-on: ubuntu-latest
permissions: pages: write id-token: write
environment: name: github-pages url: ${{ steps.deployment.outputs.page_url }}
steps: - name: Deploy id: deployment uses: actions/deploy-pages@v4
Если вы не используете GitHub Actions для развёртывания сайта (например, вручную отправляете собранный сайт в отдельный репозиторий), добавьте пустой файл .nojekyll
в каталог static
, чтобы избежать вмешательства Jekyll.