Skip to content

Доступен Vite 5.1!

8 февраля 2024

Обложка объявления Vite 5.1

Vite 5 был выпущен в ноябре, и это стало ещё одним большим шагом вперёд для Vite и экосистемы. Несколько недель назад мы отметили 10 миллионов загрузок npm в неделю и 900 участников в репозитории Vite. Сегодня мы рады объявить о выпуске Vite 5.1.

Быстрые ссылки: Документация, Изменения

Документация на других языках: English, 简体中文, 日本語, Español, Português, 한국어, Deutsch

Попробуйте Vite 5.1 онлайн в StackBlitz: vanilla, vue, react, preact, lit, svelte, solid, qwik.

Если вы новичок в Vite, мы рекомендуем сначала прочитать руководства Начало работы и Возможности.

Чтобы быть в курсе событий, следите за нами в X или Mastodon.

Vite Runtime API

Vite 5.1 добавляет экспериментальную поддержку нового API Vite Runtime. Он позволяет выполнять любой код, предварительно обрабатывая его с помощью плагинов Vite. Это отличается от server.ssrLoadModule, поскольку реализация времени выполнения отделена от сервера. Это позволяет авторам библиотек и фреймворков реализовывать свой собственный уровень взаимодействия между сервером и временем выполнения. Этот новый API предназначен для замены текущих примитивов SSR Vite, как только он станет стабильным.

Новый API приносит множество преимуществ:

  • Поддержка HMR во время SSR.
  • Он отделен от сервера, поэтому нет ограничений на количество клиентов, которые могут использовать один сервер — у каждого клиента есть свой собственный кэш модулей (вы даже можете взаимодействовать с ним так, как хотите — используя каналы сообщений, вызовы fetch, прямые вызовы функций или веб-сокеты).
  • Он не зависит от каких-либо встроенных API node/bun/deno, поэтому может работать в любой среде.
  • Легко интегрируется с инструментами, которые имеют свой собственный механизм выполнения кода (например, вы можете предоставить исполнителя для использования eval вместо new AsyncFunction).

Изначальная идея была предложена Пуйя Парса и реализована Энтони Фу в виде пакета vite-node для поддержки Dev SSR в Nuxt 3, а позже также использовалась в качестве основы для Vitest. Таким образом, общая идея vite-node была протестирована в боевых условиях на протяжении довольно долгого времени. Это новая итерация API от Владимира Шеремета, который уже повторно реализовал vite-node в Vitest и использовал полученные знания, чтобы сделать API ещё более мощным и гибким при добавлении его в Vite Core. Подготовка PR заняла целый год, вы можете увидеть эволюцию и обсуждения с разработчиками зависящих проектов экосистемы здесь.

ИНФОРМАЦИЯ

Runtime API Vite эволюционировал в Module Runner API, выпущенный в Vite 6 как часть Environment API.

Возможности

Улучшена поддержка .css?url

Импорт CSS-файлов в виде URL теперь работает надежно и корректно. Это было последнее препятствие на пути перехода Remix в Vite. См. (#15259).

build.assetsInlineLimit теперь поддерживает обратный вызов

Теперь пользователи могут предоставить обратный вызов, который возвращает булево значение для отказа или включения инлайнинга для определённых ресурсов. Если возвращается undefined, применяется логика по умолчанию. См. (#15366).

Улучшен HMR для циклического импорта

В Vite 5.0 принимаемые модули в рамках кругового импорта всегда вызывали полную перезагрузку страницы, даже если они прекрасно обрабатывались в клиенте. Теперь это сделано для того, чтобы HMR применялся без полной перезагрузки страницы, но если во время HMR произойдет какая-либо ошибка, страница будет перезагружена. См. (#15118).

Поддержка ssr.external: true для экстернализации всех пакетов SSR

Исторически сложилось так, что Vite экстернализирует все пакеты, за исключением связанных пакетов. Эта новая опция может быть использована для принудительной экстернализации всех пакетов, включая связанные пакеты. Это удобно в тестах в рамках монорепозиториев, где мы хотим эмулировать обычный случай, когда все пакеты внешние, или когда мы используем ssrLoadModule для загрузки произвольного файла и хотим всегда иметь внешние пакеты, поскольку нас не волнует HMR. См. (#10939).

Метод close в сервере предварительного просмотра

Сервер предварительного просмотра теперь предоставляет метод close, который корректно завершает работу сервера, включая все открытые сокетные соединения. См. (#15630).

Улучшение производительности

Vite продолжает становиться быстрее с каждым релизом, и Vite 5.1 наполнен улучшениями производительности. Мы измерили время загрузки для 10K модулей (дерево глубиной 25 уровней), используя vite-dev-server-perf для всех минорных версий начиная с Vite 4.0. Это хороший бенчмарк для оценки влияния подхода Vite, основанного на отсутствии пакетов. Каждый модуль — это небольшой файл TypeScript с счётчиком и импортами в другие файлы в дереве, поэтому это в основном измеряет время, необходимое для выполнения запросов к отдельным модулям. В Vite 4.0 загрузка 10K модулей заняла 8 секунд на M1 MAX. У нас был прорыв в Vite 4.3, когда мы сосредоточились на производительности, и нам удалось загрузить их за 6.35 секунд. В Vite 5.1 мы смогли сделать ещё один скачок в производительности. Vite теперь обслуживает 10K модулей за 5.35 секунд.

Прогресс времени загрузки 10K модулей Vite

Результаты этого бенчмарка работают на Headless Puppeteer и являются хорошим способом сравнения версий. Однако они не отражают время, которое испытывают пользователи. При запуске тех же 10K модулей в приватном режиме в Chrome мы имеем:

10K модулейVite 5.0Vite 5.1
Время загрузки2892 мс2765 мс
Время загрузки (кэш)2778 мс2477 мс
Полная перезагрузка2003 мс1878 мс
Полная перезагрузка (кэш)1682 мс1604 мс

Запуск препроцессоров CSS в потоках

Vite теперь имеет поддержку запуска CSS-препроцессоров в потоках по желанию. Вы можете включить это, используя css.preprocessorMaxWorkers: true. Для проекта на Vuetify 2 время запуска в режиме разработки было сокращено на 40% благодаря включению этой функции. Есть сравнение производительности для других настроек в PR. См. (#13584). Оставьте отзыв.

Новые опции для улучшения холодного запуска сервера

Вы можете установить optimizeDeps.holdUntilCrawlEnd: false, чтобы переключиться на новую стратегию оптимизации зависимостей, которая может помочь в больших проектах. Мы рассматриваем возможность переключения на эту стратегию по умолчанию в будущем. Оставьте отзыв. (#15244)

Более быстрое разрешение с помощью кэшированных проверок

Оптимизация fs.cachedChecks теперь включена по умолчанию. В Windows tryFsResolve стал примерно в 14 раз быстрее с этой оптимизацией, а разрешение идентификаторов в целом получило примерно 5-кратное ускорение в треугольном бенчмарке. (#15704)

Улучшение внутренней производительности

Сервер разработки получил несколько постепенных улучшений производительности. Новый мидлвар для короткого замыкания на 304 (#15586). Мы избегали parseRequest в горячих путях (#15617). Rollup теперь правильно загружается по требованию (#15621).

Депрекации

Мы продолжаем сокращать API Vite, где это возможно, чтобы сделать проект более поддерживаемым в долгосрочной перспективе.

Утратившая актуальность опция as в import.meta.glob

Стандарт перешёл к атрибутам импорта, но мы не планируем заменять as на новую опцию на данный момент. Вместо этого рекомендуется, чтобы пользователи переключились на query. См. (#14420).

Удалено экспериментальное предварительное объединение во время сборки

Предварительное объединение во время сборки, экспериментальная функция, добавленная в Vite 3, удалена. С переходом Rollup 4 на встроенный парсер и разработкой Rolldown, как производительность, так и несоответствие между разработкой и сборкой для этой функции больше не актуальны. Мы хотим продолжать улучшать согласованность разработки и сборки и пришли к выводу, что использование Rolldown для «предварительной сборки во время разработки» и «продакшен-сборок» является более надёжным решением на будущее. Rolldown также может реализовать кэширование таким образом, что это будет гораздо более эффективно во время сборки, чем предварительная сборка зависимостей. См. (#15184).

Примите участие

Мы благодарны 900 участникам Vite Core и разработчикам плагинов, интеграций, инструментов и переводов, которые продолжают развивать экосистему. Если вам нравится Vite, мы приглашаем вас участвовать и помогать нам. Ознакомьтесь с нашим Руководством по участию и присоединяйтесь к решению задач, обзору пулреквестов, ответам на вопросы в обсуждениях на GitHub и помощи другим в сообществе в Vite Land.

Благодарности

Выпуск Vite 5.1 стал возможен благодаря нашему сообществу участников, разработчиков в экосистеме и команде Vite. Особая благодарность отдельным лицам и компаниям, спонсирующим разработку Vite. StackBlitz, Nuxt Labs и Astro за найм членов команды Vite. А также спонсорам на GitHub Sponsors Vite, Open Collective Vite и GitHub Sponsors Эвана Ю.

Выпущено под лицензией MIT. (dev)