Переход на полную статику
Если слишком долго читать
- Обновите nuxt до
2.14.0
- Установите
target: 'static'
вnuxt.config.js
- Запустите
nuxt generate
- Вот и все ✨
Бонус: вы можете запустить nuxt start
, чтобы запустить локальный сервер, обслуживающий сгенерированное статическое приложение.
Примечание: в этом видео мы используем nuxt export
, который устарел, в пользу nuxt generate
.
Содержание
- Если слишком долго читать
- Содержание
- История
- Актуальные проблемы
- Новая опция конфигурации:
target
- Более умный
nuxt generate
- Более умный
nuxt start
- Режим предварительного просмотра
- Команды
История
Nuxt имел функцию статической генерации с nuxt generate
начиная с v0.3.2 (ноябрь 2016 г.), с тех пор мы улучшили ее несколькими способами, но так и не добились полной статической генерации. Сегодня я рад сообщить, что полный статический экспорт теперь возможен с Nuxt 2.13.
Актуальные проблемы
nuxt generate
в основном выполняет предварительный рендеринг, когда вы перемещаетесь на клиенте, вызываются asyncData
и fetch
, делающие запрос к вашему API. Многие пользователи просили поддержку "полностью статического" режима, то есть не вызывать эти 2 хука при навигации, поскольку следующая страница уже была предварительно отрисована.
Кроме того, опыт разработчика не является оптимальным:
- У вас есть доступ к
req
илиres
в SSR, но не при запускеnuxt generate
. process.static
имеет значениеtrue
только при запускеnuxt generate
, что замедляет разработку модулей Nuxt или плагинов для статической генерации.- Вам приходится указывать все динамические роуты в
generate.routes
, что усложняет задачу, поскольку у вас нет доступа к модулям nuxt. - Вы не можете протестировать резервный вариант SPA в разработке, резервный вариант — это клиентская версия вашего приложения Nuxt, которая загружается при попадании на страницу 404.
nuxt generate
запускаетnuxt build
по умолчанию, что замедляет генерацию вашего сайта, если изменился только контент
Обратите внимание, что можно было получить полную статическую поддержку с помощью модуля nuxt-payload-extractor, но он был более многословным в использовании и имел ограничения.
Новая опция конфигурации: target
Чтобы улучшить пользовательский опыт, а также сообщить Nuxt, что вы хотите экспортировать свое приложение на статический хостинг, мы вводим опцию target
в nuxt.config.js
:
<script setup>
import { ref, computed } from '#imports'
const count = ref(1)
const double = computed(() => count.value * 2)
</script>
ssr: 'false'
(что то же самое, что и устаревший mode: 'spa'
), поскольку этот режим используется только для рендеринга на клиенте (одностраничные приложения).Запуск nuxt dev
с target: 'static'
улучшит опыт разработчика:
- Удаление
req
иres
из контекста - Возврат к рендерингу на клиенте при возникновении ошибки 404, ошибок и перенаправлений (см. Возврат к SPA)
$route.query
всегда будет равен{}
при рендеринге на сервереprocess.static
будет иметь значениеtrue
Мы также предоставляем process.target
для авторов модулей, чтобы они могли добавлять логику в зависимости от цели пользователя.
Более умный nuxt generate
Теперь, начиная с v2.14.0
, вы можете использовать nuxt generate
, и он сам определит, нужно ли выполнять сборку или нет.
Безумно быстрые статические приложения
nuxt generate
с target: 'static'
предварительно отрисует все ваши страницы в HTML и сохранит payload в файл, чтобы имитировать asyncData
и fetch
при навигации на клиенте. Это означает никаких больше HTTP-вызовов к вашему API при навигации на клиенте. Извлекая payload страницы в файл js, он также уменьшает размер обслуживаемого HTML, а также предварительно загружает его (из <link>
в заголовке) для оптимальной производительности.
Мы также улучшили интеллектуальную предварительную выборку при выполнении полной статики, она также будет извлекать полезные данные, делая навигацию мгновенной. 👀
Интегрированный краулер
Вдобавок ко всему, в нем также есть краулер, который обнаруживает каждую относительную ссылку и генерирует ее:
Если вы хотите исключить несколько маршрутов, используйте generate.exclude. Вы можете продолжать использовать generate.routes, чтобы добавлять дополнительные маршруты, которые краулер не смог обнаружить.
Чтобы отключить краулера, установите generate.crawler: false
в nuxt.config.js
Более быстрый ре-деплой
Разделив nuxt build
и nuxt export
, мы открываем новый ряд улучшений: предварительная визуализация страниц только в случае изменения контента, это означает: отсутствие сборки webpack → более быстрый ре-деплой.
Более умный nuxt start
После статической генерации приложения Nuxt в dist/
используйте nuxt start
для запуска рабочего HTTP-сервера и обслуживания статического приложения, поддерживающего SPA Fallback.
Эта команда идеально подходит для локального тестирования статического приложения перед отправкой его вашему любимому провайдеру статического хостинга.
Режим предварительного просмотра
Мы поддерживаем предварительный просмотр в реальном времени прямо из коробки, чтобы продолжать вызывать ваш API:
export default async function ({ query, enablePreview }) {
if (query.preview) {
enablePreview()
}
}
Он автоматически обновит данные страницы (вызывая nuxtServerInit
, asyncData
и fetch
).
При активации режима предварительного просмотра будут вызваны оригинальные методы asyncData
и fetch
.
Команды
В зависимости от target
вы можете выполнить эти команды.
server
nuxt dev
: Запустить сервер разработкиnuxt build
: Подготовить приложение Nuxt к продакшенуnuxt start
: Запустить продакшен-сервер
static
nuxt dev
: Запустить сервер разработки (с поддержкой статики)nuxt generate
: Собрать приложение Nuxt (с поддержкой статики) для продакшена при необходимости и экспортировать его в статический HTML в каталогdist/
nuxt start
: Раздавать продакшен-приложение изdist/
Что делать дальше
Улучшения статики Nuxt 2
С версии Nuxt 2.13 был представлен полностью статический режим. Кроме того, была добавлена новая команда nuxt export для предварительного рендеринга ваших страниц без запуска сборки webpack с целью разделить процесс рендеринга и сборки. Единственной проблемой было то, что большинство пользователей Nuxt не могли раскрыть весь потенциал разделения... пока что.
Понимание работы fetch в Nuxt 2.12
Изучение различных функций хука fetch и изучение нового способа внесения данных в приложения Nuxt.