Введение
Я работаю фронтенд-разработчицей в IT-компании, и многие из моих проектов на протяжении долгого времени собирались с использованием Webpack. Настройка Webpack иногда бывала сложной, но в целом он справлялся с задачей сборки проектов. Однако в последнее время мои коллеги начали восторгаться новым инструментом - Vite. Они рассказывали о его легковесности, быстрой сборке и преимуществах для разработчиков React-приложений. В этой статье я поделюсь своим опытом миграции с Webpack и react-scripts на Vite. Я расскажу о причинах, по которым решила попробовать Vite, а также о том, с какими сложностями пришлось столкнуться и как они были решены.
Почему Vite?
Легковесность и Быстрая Сборка
Одной из главных причин, по которым я решила попробовать Vite, была его легковесность и невероятная скорость сборки проекта. Vite разработан с учетом современных требований для разработки веб-приложений и, в отличие от Webpack, не требует предварительной сборки всех зависимостей перед запуском проекта. Это означает, что разработка проходит намного быстрее, так как Vite собирает только те файлы, которые действительно используются в процессе разработки.
Горячая Замена Модулей
Еще одним значимым преимуществом Vite является горячая замена модулей (HMR), которая позволяет вам видеть изменения в коде сразу же после сохранения файла, без необходимости перезагрузки всего приложения. Это значительно ускоряет процесс разработки и улучшает опыт разработчика.
Простая Настройка
Настройка Vite оказалась гораздо проще, чем Webpack. В большинстве случаев не требуется большое количество конфигурационных файлов и плагинов. Vite предоставляет интуитивно понятный файл vite.config.ts, который позволяет легко настраивать сборку приложения.
Сложности и Их Решение
После того как я решила дать шанс Vite, я столкнулась с рядом сложностей. Одной из первых сложностей, с которыми я столкнулась, было отсутствие отображения моих иконок FontAwesome. После нескольких часов поиска решения в интернете и экспериментов с настройками Vite, мне пришлось признать, что проблему остается нерешенной.
FontAwesome
Нюанс оказался связанным с тем, как Vite обрабатывает шрифты и иконки по умолчанию. Вместо того, чтобы использовать тег <i>, который привычно использовался с FontAwesome, Vite рекомендует использовать компоненты FontAwesome. Вот как я решила эту проблему:
Установка пакета @fortawesome/react-fontawesome: Сначала я установила пакет @fortawesome/react-fontawesome, который предоставляет компоненты для отображения иконок FontAwesome в React-приложениях. Вы можете установить его с помощью npm или yarn:
Использование компонента <FontAwesomeIcon>: Затем я начала заменять все теги <i> с классами FontAwesome на компонент <FontAwesomeIcon>. Например:
Импорт иконок: Для того чтобы использовать иконки FontAwesome внутри компонентов, я импортировала нужные иконки в файле, где они используются:
Продолжение разработки: После выполнения этих шагов, иконки FontAwesome стали отображаться корректно в моем приложении на Vite, и я могла продолжить разработку без дополнительных проблем.
Таким образом, решение проблемы с FontAwesome оказалось несложным, и использование компонентов FontAwesome стало хорошей практикой в моих проектах на Vite.
Загрузка Страницы
Еще одним интересным нюансом, с которой я столкнулась при миграции на Vite, была проблема с открытием фронтенд-страницы. После перехода на Vite, мой проект компилировался без ошибок, но сама страница не загружалась. После нескольких часов изучения конфигураций и поиска в интернете, я нашла решение, которое, казалось бы, простое, но могло быть упущено.
В реактовских проектах, файл index.html обычно располагается в папке public. Однако, при использовании Vite, вам следует поместить файл index.html в корень вашего проекта. Этот файл играет важную роль в настройке корневого пути для вашего приложения, и его расположение в корне необходимо для правильной работы Vite.
После перемещения файла index.html в корень проекта, проблема с загрузкой страницы была успешно решена, и мое приложение начало работать корректно.
Не забудьте проверить, что у вас нет других зависимостей, которые могут ссылаться на файл index.html в старом местоположении в папке public.
Прокси в Vite
В процессе миграции на Vite, я столкнулась с нюансом, связанным с настройкой прокси. В большинстве React-проектов, прокси обычно настраивается в файле package.json с использованием свойства proxy. Однако, при использовании Vite, у меня возникли сложности с этим подходом.
Vite предоставляет собой свой собственный механизм настройки прокси, который следует настраивать в конфигурационном файле vite.config.ts. Это может показаться непривычным для разработчиков, привыкших использовать proxy в package.json, но это важно учитывать при работе с Vite.
Для настройки прокси в Vite, вам нужно будет создать файл vite.config.ts, если его еще нет, и добавить конфигурацию прокси внутри этого файла. Пример конфигурации:
Заключение: Почему Vite - Лучший Выбор для React
Миграция с Webpack и react-scripts на Vite оказалась для меня увлекательным и продуктивным опытом. В итоге, я пришла к выводу, что Vite - это именно тот инструмент, который может значительно улучшить процесс разработки React-приложений.
Быстрота и Эффективность
Самым первым преимуществом Vite, которое меня впечатлило, была его невероятная скорость сборки проекта. Способность Vite компилировать только необходимые модули и обеспечивать горячую замену модулей значительно ускоряет разработку и обновление кода.
Легковесность и Простота
Настройка Vite оказалась намного проще и понятнее, чем Webpack. Отсутствие необходимости в большом количестве конфигурационных файлов и интуитивно понятный vite.config.js делают процесс сборки проекта более простым и доступным для разработчиков.
Экосистема Плагинов
Vite имеет обширную экосистему плагинов, которые могут быть легко интегрированы в проект. Это позволяет разработчикам расширить функциональность Vite в соответствии с их потребностями.
В заключение, переход на Vite оказался удачным шагом для моих проектов. Он не только улучшил производительность и скорость разработки, но и сделал процесс настройки и сборки проекта более простым.
Комментарии (11)
WOLFRIEND
06.10.2023 09:05А Vite может работать только для CSS файлов?
Попробую объяснить проблему: есть проект, который состоит только из SCSS файлов (то есть там не нужны js файлы совсем). Нужен сборщик который объеденит их в один и минифицирует. На данном этапе с этим отлично справляется WebPack, но есть небольшое но. Ему для работы нужен хотя бы один js файл, как точка входа можно сказать. Хоть его цель и заключается только в обработке css, ему все равно нужен этот js файл (на данный момент он просто пустой), и в итоговой сборке это тоже пустой js файл. И получается настроен плагин что после сборки он просто удаляет ненужный js файл. Может ли Vite работать только с CSS?
moby76
06.10.2023 09:05Инструменты нужно использовать по назначению. В этом случае Gulp лучше подойдет.
severtain
06.10.2023 09:05"Легковесность" в идеале замеры одного и того же кода в Кб, чтобы понять разницу.
"Быстрая Сборка" даже на старых системниках не замечал проблем со скоростью сборки.
"без необходимости перезагрузки всего приложения" точно такого нет в webpack? Вот прям точно?
"Простая Настройка" а как там с bable?
В целом, после поста захотелось проверить Vite на практике. Но, пока, выгода от перехода не совсем очевидна.zede
06.10.2023 09:05Легковесность - тут скорее про тулчейн, чем про выходной файл
Быстрая Сборка - проекты на вебпаке прямо ощутимо дольше собираются чем на vite. Особенно если хорошая работа над разбиением на чанки была произведена
Простая Настройка - бабель там не используется. Вместо него esbuild, что и дает заметный выигрыш по скорости
Yrsafam
06.10.2023 09:05Недавно тоже довелось поработать с vite. Для меня пока сырым и неоднозначным остался данный сборщик.
Из плюсов я увидел:
более быструю работу в режиме разработки за счёт использования esm модулей, что избавляет сборщик от их сборки во время разработки так как это делает webpack.
Нулевая конфигурация. Если тебе нужно условное приложение на реакте с клиентским рендерингом - можно быстро развернуть готовый шаблон.
Относительно широкий спектр плагинов.
Из минусов лично для меня выделил следующие:
Не такая широкая экосистема плагинов как у вебпака. Встречалось такое, что попросту невозможно было найти какое-то решение, которое хотя бы подтолкнуло к решению проблемы.
Не большое комьюнити на текущий момент. По вебпаку множество сообществ, ответов, статей и ТД. Vite пока не успел обрасти таким количеством
Нет проверенных, официальных шаблонов по некоторым часто выполняемым задачам. Например, SSR. Да, в документации есть какие-то шаблоны, но насколько они покрывают частые случаи - загадка.
Продакшн сборка происходит всё таким старым способом в виде бандла с помощью rollup.
noodles
06.10.2023 09:05Из минусов лично для меня выделил следующие:
Дополню. Разработчик там один китаец, которого может збить автобус. И насколько помню - он основной разработчик vue.. соответственно приоритет при решении проблем будет отдавать больше vue чем реакту, чтобы продвигать свою библиотеку.
zede
06.10.2023 09:05Давайте все по пунктам разберем.
Сравнение с экосистемой вебпака. Да сейчас экосистема вебпака больше, но это будет оч быстро меняться. Уже все современные фреймворки и продукты уходят от поддержки первого уровня webpack-а на поддержку в первую очередь vite (Angular тоже уже заявил о переходе на vite. только с React вопросы ибо им все равно)
Официальное решение по SSR это vike
rollup - ну и чем это плохо? тем более на последней конференции объявили что уже в разработке Rolldown (Rollup на Rust)
В комменте про китайца и автобус. Ну глупости то зачем говорить? Он создатель, но далеко не единственный разработчик. Для опровержения бас-фактора можно посмотреть, что сейчас он уже оч мало своего вносит https://github.com/vitejs/vite/graphs/contributors
19Zb84
vite или esbuild
Troonsply Автор
почему "или" если Vite использует esbuild для преобразования TypeScript в JavaScript,