Улучшения статики Nuxt 2
Введение
С версии Nuxt 2.13 был представлен полностью статический режим. Кроме того, была добавлена новая команда nuxt export
для предварительного рендеринга ваших страниц без запуска сборки webpack с целью разделить процесс рендеринга и сборки. Единственной проблемой было то, что большинство пользователей Nuxt не могли раскрыть весь потенциал разделения... пока что.
- Введение
- Быстрое статическое развертывание
- Время генерации: кэш против полной сборки webpack
- Использование в ваших проектах
- Как это работает
- Что делать дальше
Быстрое статическое развертывание
С версии 2.14 nuxt generate
автоматически пропустит шаг сборки webpack, если код не был изменен, и будет использовать предыдущую сборку с помощью кэша. Это поможет значительно сократить время статического развертывания, избегая ненужных сборок, которые обычно являются наиболее затратной по времени частью процесса генерации. Поддержка кэша является платформенно-независимой и работает на Netlify, Vercel или любом другом настроенном CI/CD, который кэширует node_modules
.
Время генерации: кэш против полной сборки webpack
Сравните время в секундах между двумя nuxt generate
:
Build
когда требуется сборка webpackCache
только когда изменилось содержимое (сборка webpack пропущена)
Ссылки на проекты: Basic, Strapi Module Docs, Content Module Docs и Nuxt 2 Docs.
Использование в ваших проектах
- Обновите
nuxt
до последней дополнительной версии, которой является v2.14.
npm update
- Убедитесь, что
target
имеет значениеstatic
в вашемnuxt.config
nuxt.config.jsexport default { target: 'static' // ... }
nuxt generate
будет вести себя так же, как и раньше, чтобы избежать изменений, несовместимых с предыдущими версиями, и обеспечить обратную совместимость, если вы сохраните target: ‘server’
или не укажете совсем.
- Это все 🙌
Теперь команда nuxt generate
будет создавать проект только при необходимости, то есть когда файлы в проекте были изменены. Она всегда повторно рендерит ваши маршруты в статические HTML-файлы, как это уже делает nuxt export
.
Теперь вам нужно изменить команду сборки с nuxt build && nuxt export
на nuxt generate
на платформе, которую вы используете. Если вы используете CI, убедитесь, что вы правильно кэшируете node_modules
.
Исключение файлов из кэша
По умолчанию nuxt игнорирует эти директории, так что если в них произойдут изменения, сборка не будет запущена:
- Директория сборки (
.nuxt/
) - Директория статики (
static/
) - Директория генерации (
dist/
) node_modules
README.md
- Скрытые файлы (например,
.npmrc
)
Вы можете добавить больше шаблонов с помощью параметра generate.cache.ignore в nuxt.config
:
export default {
generate: {
cache: {
ignore: [
// Когда что-то изменилось в папке docs, не пересобирайте через webpack
'docs'
]
}
}
}
Также можно использовать функцию для параметра ignore
, чтобы переопределить стандартные записи игнорирования.
Авторы модулей
Что делать, если вы разрабатываете модуль nuxt, который работает с файлами, которые не должны запускать повторную сборку? Лучшим примером является модуль @nuxt/content, который читает файлы markdown из репозитория. В этом случае эти файлы используются в runtime-модуле, что имеет место при использовании @nuxt/content
, сам модуль может сообщить nuxt игнорировать эти файлы для вас, так что вам не нужно ничего делать! Авторы модулей могут использовать новый хук generate:cache:ignore
для этого:
nuxt.hook('generate:cache:ignore', ignore => ignore.push('content'))
Как это работает
При использовании новой команды nuxt generate
с целью static
будет создан снимок, включающий контрольную сумму файлов проекта, не включенных в игнорирование, версию nuxt и некоторую другую конфигурацию, и записан в .nuxt/build.json
. Кроме того, мы также перемещаем директорию сборки в node_modules/.cache/nuxt
. Поскольку node_modules
кэшируется всеми основными платформами (Netlify, Vercel, ...) и общими скриптами CI/CD, это решение работает из коробки без дополнительной настройки.
При последующем вызове nuxt generate
он снова создаст контрольную сумму на основе файлов вашего проекта и сравнит ее с существующей в node_modules/.cache/nuxt/build.json
.
Если они совпадают, это означает, что ничего не изменилось, что требует повторной сборки, поэтому мы можем непосредственно начать рендеринг страниц.
Если обнаружено несоответствие, это означает, что потребуется полная пересборка. Вы также можете увидеть, какой файл вызвал повторную сборку, проверив журналы консоли. После сборки nuxt generate сохранит новую контрольную сумму в .nuxt/build.json
. Вы можете проверить полную реализацию здесь.
Возвращение к старым командам
С версии Nuxt v2.13 мы представили команды nuxt export
и nuxt serve
, специально разработанные для статической цели. С версии Nuxt v2.14 они устарели, поскольку nuxt generate
и nuxt start
умны для определения цели и сборки при необходимости.
Для SSR:
nuxt dev
= сервер разработкиnuxt build
= сборка вашего приложения для продакшенаnuxt start
= запуск сервера продакшена (используйте его для хостинга Node.js, такого как Heroku, Digital Ocean и т.д.)
Для статического режима:
nuxt dev
= сервер разработкиnuxt generate
= сборка при необходимости и статический экспорт вdist/
nuxt start
= предоставление директорииdist/
так, как это делает ваш статический хостинг (Netlify, Vercel, Surge и т.д.). Отлично для тестирования перед развертыванием
Что делать дальше
- Обновите ваш проект до nuxt@2.14.0
- Используйте
nuxt generate
вместоnuxt export
- Используйте
nuxt start
вместоnuxt serve
- Наслаждайтесь быстрым развертыванием 🤙
Представляем Nuxt 3 Beta
Спустя 468 дней после первого коммита наконец-то появилась бета-версия Nuxt 3. Узнайте, что в ней содержится и что от нее можно ожидать. Да, она включает в себя Vue 3 и Vite. ⚡️
Переход на полную статику
Долгожданные функции для поклонников JAMstack были реализованы в версии 2.13: полный статический экспорт, улучшенная интеллектуальная предварительная выборка, интегрированный краулер, более быстрый ре-деплой, встроенный веб-сервер и новая опция цели для конфигурации. ⚡️