Cloudflare выпустила Vinext 1.0 — фреймворк с открытым исходным кодом, позволяющий запускать приложения Next.js поверх Vite и развертывать их на таких платформах, как Cloudflare Workers, Netlify и AWS Lambda. Проект ориентирован на новые и существующие приложения, включая использующие Pages Router или App Router, а не ограничивает поддержку более новой архитектурой Next.js.
Более широкая совместимость с приложениями Next.js
При запуске в феврале Vinext был экспериментом, созданным с активным использованием искусственного интеллекта и продолжавшимся неделю, а теперь превратился во фреймворк, который, по словам Cloudflare, используется в производственной среде с высоконагруженными и динамическими приложениями. Компания утверждает, что его совместимость с большинством функций, запрошенных клиентами, превышает 99%; при этом продолжается проверка фактического поведения приложений, а не просто имитация API с теми же названиями.
Выпуск поддерживает маршрутизаторы App Router и Pages Router, а также гибридные приложения, серверные компоненты React, серверные действия, API-маршруты, обработчики маршрутов, промежуточное программное обеспечение и навигацию на стороне клиента. Он также охватывает серверный рендеринг страниц, инкрементальную регенерацию страниц (ISR), экспорт в статические ресурсы, фоновую или выполняемую по запросу повторную валидацию.
Что меняется на практике?
Vinext унифицирует функции кэширования между двумя маршрутизаторами и поддерживаемыми средами выполнения, а также добавляет поддержку Workers Cache. Кроме того, он обеспечивает совместимое с Next.js трассирование, позволяя продолжать использовать текущие настройки OpenTelemetry и Sentry, и интегрируется в Cloudflare Workers с нативными инструментами мониторинга Workers.
Выпуск добавляет прямую поддержку среды workerd при разработке и в производственной среде, а также доступ к возможностям Cloudflare, таким как оптимизация изображений и Hyperdrive. При этом поддержка маршрутизации use cache, связанной с Cache Components, по-прежнему ограничена; Cloudflare поясняет, что текущим приоритетом являются основные функции фреймворка, от которых зависят производственные приложения.
Прогрев кэша перед запуском
Vinext 1.0 предоставляет механизм предварительного рендеринга страниц для маршрутизаторов App Router и Pages Router во время сборки, после чего они отдаются через ISR и инвалидируются по маршруту или тегу. Однако он также добавляет другой вариант для приложений, содержащих десятки или сотни тысяч URL: перенос части предварительного рендеринга с устройства сборки в сеть Cloudflare.
Функция cache warming использует обычные индикаторы Next.js для определения страниц, которые необходимо подготовить, а также может определять страницы с высокой посещаемостью. Перед переключением новой версии на производственный трафик Cloudflare развертывает версию Worker с нулевой долей трафика, затем запрашивает страницы у этой версии для заполнения кэша, и после завершения процесса развертывание можно повысить. Это сокращает ожидание последовательной сборки малопосещаемых страниц, но на практике связывает использование этой функции с развертыванием в Cloudflare.
Тестирование и путь миграции
Cloudflare утверждает, что проект опирается на тысячи тестов, охватывающих поведение фреймворка, серверы в режимах разработки и производства, а также цели развертывания на Node.js и Cloudflare Workers. Кроме того, каждую ночь на Vinext запускается полный набор тестов Next.js для выявления регрессий, вызванных изменениями в исходном проекте. Процесс миграции включает две команды для проверки совместимости проекта, настройки Vite и конфигурации развертывания с сохранением прежней структуры проекта Next.js: npx vinext check, затем npx vinext init.
Vinext доступен для новых и существующих проектов и может быть развернут на Cloudflare Workers с прогревом кэша с помощью команды npx @vinext/cloudflare deploy --warm-cache. Матрица совместимости и неполная поддержка таких функций, как Cache Components, остаются аспектами, которые командам следует проверить перед внедрением миграции в сложных приложениях.