Чтобы использовать SvelteKit в качестве генератора статических сайтов 'static site generator' (SSG), используйте adapter-static
.
Это приведет к пререндеру всего сайта как коллекции статических файлов. Если вы хотите пререндерить только некоторые страницы, вам нужно использовать другой адаптер вместе с опцией prerender
.
Установите с помощью npm i -D @sveltejs/adapter-static
, затем добавьте адаптер в ваш файл svelte.config.js
:
svelte.config.js
import adapter from '@sveltejs/adapter-static';
export default {
kit: {
adapter: adapter({
// Показаны параметры по умолчанию. На некоторых платформах
// эти параметры устанавливаются автоматически — см. ниже
pages: 'build',
assets: 'build',
fallback: null,
precompress: false,
strict: true
})
}
};
...и добавьте опцию prerender
в ваш корневой макет:
src/routes/+layout.js
// Параметр может быть 'false', если вы используете резервную страницу (например, в режиме SPA).
export const prerender = true;
Вы должны убедиться, что опция SvelteKit
trailingSlash
установлена соответствующим образом для вашего окружения. Если ваш хост не выводит/a.html
при получении запроса на/a
, то вам нужно установитьtrailingSlash: 'always'
для вывода/a/index.html
вместо/a.html
.
Некоторые платформы имеют поддержку нулевой конфигурации (в будущем появится еще больше):
На этих платформах следует опустить опции адаптера, чтобы adapter-static
мог обеспечить оптимальную конфигурацию:
svelte.config.js
export default {
kit: {
- adapter: adapter({...}),
+ adapter: adapter(),
}
}
};
Каталог для записи пререндеренных страниц. По умолчанию это build
.
Каталог для записи статических ресурсов (содержимое каталога static
, плюс клиентские JS и CSS, сгенерированные SvelteKit). Обычно это должно быть то же самое, что и pages
, и по умолчанию оно будет равно значению pages
, но в редких случаях вам может понадобиться выводить страницы и ресурсы в отдельные места.
Укажите резервную страницу для SPA-режима, например, index.html
или 200.html
или 404.html
.
Если значение параметра true
, предварительно сжимает файлы с помощью brotli и gzip. В результате будут созданы файлы .br
и .gz
.
По умолчанию adapter-static
проверяет, что либо все страницы и конечные точки (если они есть) вашего приложения были пререндерены, либо у вас установлена опция fallback
. Эта проверка существует для того, чтобы вы случайно не опубликовали приложение, некоторые части которого недоступны, потому что они не содержатся в конечном выводе. Если вы знаете, что это нормально (например, когда определенная страница существует только условно), вы можете установить strict
в false
, чтобы отключить эту проверку.
При сборке для GitHub Pages убедитесь, что paths.base
соответствует имени вашего репозитория, поскольку сайт будет обслуживаться из https://ваше-имя.github.io/название-вашего-репозитария, а не из корня.
Вам придется запретить предоставляемому GitHub Jekyll управлять вашим сайтом, поместив пустой файл .nojekyll
в папку static
.
Конфигурация для GitHub Pages может выглядеть следующим образом:
svelte.config.js
import adapter from '@sveltejs/adapter-static';
const dev = process.argv.includes('dev');
/** @type {import('@sveltejs/kit').Config} */
const config = {
kit: {
adapter: adapter(),
paths: {
base: dev ? '' : process.env.BASE_PATH,
}
}
};
Вы можете использовать действия GitHub для автоматического развертывания вашего сайта на GitHub Pages при внесении изменений. Вот пример рабочего процесса:
.github/workflows/deploy.yml
name: Развертывание на страницах GitHub
on:
push:
branches: 'main'
jobs:
build_site:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
# Если вы используете pnpm, добавьте этот шаг, а затем измените команды и ключ кэша ниже, чтобы использовать `pnpm`.
# - name: Установка pnpm
# uses: pnpm/action-setup@v2
# with:
# version: 8
- name: Установка Node.js
uses: actions/setup-node@v3
with:
node-version: 18
cache: npm
- name: Установка зависимостей
run: npm install
- name: build
env:
BASE_PATH: '/название-вашего-репозитария'
run: |
npm run build
touch build/.nojekyll
- name: Загрузка Artifacts
uses: actions/upload-pages-artifact@v1
with:
# это должно соответствовать параметру `pages` в ваших опциях статического адаптера
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: Развёртывание
id: deployment
uses: actions/deploy-pages@v1