После выхода крайней и достаточно революционной в плане добавления Composition API версии Vue 3.0 более чем три года назад, каких-либо серьезных изменений от команды Evan You в самом фреймворке больше не было. Только стандартные багфиксы, оптимизация и робкие попытки стать с TypeScript ближе. Основное внимание переключилось на экосистему - Vite, Nuxt, VitePress, Pinia и другие.

В то же время, отчетливо заметно масштабирование работы не вглубь, а вширь. Интересы команды уже давно явно выходят за пределы фреймворка.

Vite

Основной таран экосистемы - Vite. Его экспансия за пределы Vue проектов - уже свершившийся факт, достаточно посмотреть на статистику загрузки npm пакетов:

На "декабрьскую аномалию" 2022 года Vue обращать внимания не стоит. Корни ее так и не были найдены.
На "декабрьскую аномалию" 2022 года Vue обращать внимания не стоит. Корни ее так и не были найдены.

Vite как инструмент уже используется при разработке на других JavaScript фреймворках и чистом js. Его грандиозный успех привел к переключению команды Vue именно на него. На этот раз разработка пошла не только вширь (расширение функционала), но и вглубь - портирование Rollup на Rust. Уже даже есть название нового сборщика - Rolldown.

На данный момент Vite использует два разных сборщика - esbuild для запуска на dev сервере (скорость) и Rollup для билда (экосистема плагинов), что даёт некоторые проблемы в совместимости их результатов. Rolldown предполагается использовать и для того, и для другого.

9:46 PM · 5 окт. 2023 г.      328,9 тыс. просмотров
9:46 PM · 5 окт. 2023 г. 328,9 тыс. просмотров

Anthony Fu

Первый человек по активности в команде Vue Anthony Fu ведет атаку с флангов. Создатель Vitest, Slidev, VueUse, UnoCSS, Elk, Type Challenges и многого другого и один из основных разработчиков Nuxt вместе с его автором Pooya Parsa выделил из фреймворка некоторые удачные модули и продвигает их в JavaScript мир независимо. Таким модулем является, например, Nitro, библиотеки unjs и unplugin (префикс "un" означает unified или universal, если что).

Теория множеств от Anthony Fu
Теория множеств от Anthony Fu

Очень часто подобные системы являются не просто библиотеками, а комбайном, позволяющим "легко" создавать что-то и сразу деплоить на частные хостинг решения, типа Vercel или AWS, что вызывает законные претензии у опытных разработчиков, привыкшим к стандартам, слабой связности сервисов и открытым технологиям, но, очевидно, притягивает начинающих.

По другому флангу Anthony Fu повел тяжелую кавалерию на ESlint в виде пакета @antfu/eslint-config , который существует уже больше года, но за последние три недели рванул с версии 0.43.1 до 2.1.0, получив в последней "Optional react support". Нужно сказать, что данный конфиг действительно очень сильно упрощает настройку линтера на js проектах и рекомендуется к применению.

Кроме линтера Anthony подобрал задеприкеченные ESbuild-ом правила по форматированию текста и создал новый проект - Stylistic. Почему Prettier не подходит иногда для форматирования он объясняет отдельно.

VitePress

VitePress, последователь VuePress, SSG фреймворк, де-факто стандарт для внутри-экосистемных документаций. Представляет собой законченный продукт, позволяющий создать приятную справочную систему разработчику, даже не знакомому с Vue. Кастомизация же с помощью Vue компонент позволяет сделать если не всё, то очень многое, включая как персональный блог, так и онлайн магазин.

Я бы сказал, что VitePress сильно пока ещё недооценён, и у него огромный потенциал на своём поле битвы. Anthony Fu, кстати, недавно и там сделал коммиты, оптимизируя рендеринг блоков кода.

Идеологическая работа

Выше рассмотрены всего три момента, которые однако ясно показывают текущую стратегию команды Vue.js. Недавние выступления Evan You, например THINKING ACROSS THE FRAMEWORK BARRIER - RenderATL 2023 и Nuxt Nation 2023: Evan You - Vue.js and Vite Updates подтверждают это.

Anthony Fu также является открытым проповедником по агностицированию и расширению экосистемы Vue и аннексиям чужих территорий, выпуская для своих адептов обучающие видео подобно этому - Anthony's Road to Open Source: The Set Theory | ViteConf 2023.

Напутствия замполита
Напутствия замполита

Рынок вакансий и вебсайтов

Теперь посмотрим на рынок вакансий. Еще совсем недавно Vue назывался младшим братом React и Angular. На данный момент:

Хабр Карьера, открытых вакансий:

  • React - 131

  • Vue.js -  77

  • Angular - 40

Upwork, предложения, опубликованные за последние 5 дней:

  • React - 800

  • Vue 120

  • Angular - 70

Тренды

Ну и напоследок заглянем на trends.builtwith.com, показывающий статистику сайтов, использующих те или иные технологии:

Примечание: временные шкалы на всех графиках не являются линейными и не дают представления о сравнительном росте графиков. Рост Vue.js происходит быстрее.

Обратим внимание на второе место в списке стран по популярности Vue. Будем надеяться, что в этом заслуга и нашего блога )

Из вышеуказанной статистики видно, что Vue "в среднем" на данный момент отстает от React примерно в два раза. За последние 4 года Vue сократил отставание от React по загрузке основного npm пакета с 7 до 4 раз. Ну и надо учитывать инерционность рынка - доминирование React 5-10 лет назад было, всё-таки, подавляющим, а вебсайты не переписываются каждый год на новый фреймворк.

Тренды Ангуляра удручающи для Google, что, наверное, как-то связано с его менеджментом. Падение в 2021 году очевидно было вызвано стратегическими решениями топ-менеджеров компаний отказаться от Ангуляра еще за 2-3 года до этого. Так что из вопроса: "Смогут ли гиганты Facebook и Google остановить китайского самородка?" второго гиганта можно уже вычёркивать, и всего два бойца остаются в Mixed Frontend Arts октагоне в схватке между свободным разумом опен сорса и кровавыми деньгами корпораций.


Узнать интересную и полезную информацию о Vue.js, а также изучить фреймворк по переводу лучшего учебника по данной теме "Vue.js 3 Design Patterns and Best Practices" можно на нашем сайте: Vue-FAQ.org.

Также у нас появился Телеграм-канал: https://t.me/vuefaq


P.S. Как правильно заметил @format1981 в комментариях, результаты опросов ниже мало о чем говорят, кроме как косвенно о статистике заинтересовавшихся материалом данной статьи.

Комментарии (26)


  1. axelmaker
    28.11.2023 17:50

    Судя по графику и информации с https://trends.builtwith.com/javascript/Vue , популярность Vue выходит на плато, и фреймворк наиболее популярен в России, чем в остальном мире


    1. gmtd Автор
      28.11.2023 17:50
      +1

      Там есть сноска про разные масштабы и нелинейность шкал времени

      Кроме того, по какой-то причине на моих скриншотах он нарисовал иные временные метки, нежели на текущих. Поэтому правая часть видится более пологой.

      В любом случае, данные графики имеет смысл анализировать в масштабе, а не в деталях.


    1. gmtd Автор
      28.11.2023 17:50

      Что касается распределения по странам, то там, скорей всего, имеется ввиду страна размещения сервера вебсайта, что объясняет гегемонию США. При этом значимыми факторами могут являться не технические - внутреннее законодательство страны, регламентирующее хранение и обработку персональных данных, например.


  1. jenesius
    28.11.2023 17:50
    +1

    Уже несколько раз сталкиваюсь с тем, что разработчик делает свою тему для `Vitepress` и использует её как полноценный онлайн продукт, а не как простой набор md файлов. В своё время сам столкнулся с задачей написания документации и этот проект упростил жизнь своей лёгкостью и простотой https://modal.jenesius.com.

    Отличная статья!


  1. format1981
    28.11.2023 17:50
    +8

    Результаты голосования показывают какой фреймворк используют разрабы открывшие статью и пролиставшие до опроса. А зашли в статью в основном те, кто интересуется Vue. Так что большой перевес Vue - это ошибка выжившего.

    P.S. Я сам голосовал за Vue.


    1. hello_my_name_is_dany
      28.11.2023 17:50
      +4

      На вряд ли много разработчиков на React и Angular зайдут на статью, где в названии только Vue


      1. DmitryOlkhovoi
        28.11.2023 17:50
        +3

        они слишком заняты


  1. mrobespierre
    28.11.2023 17:50
    +6

    Спасибо за статью.

    щутка

    Крайней бывает мера, необходимость и плоть, а версия - последняя


  1. nin-jin
    28.11.2023 17:50
    +2

    Я, наверно, что-то пропустил, но можно подробности про планы по отказу от Ангуляра в 2021?


  1. WondeRu
    28.11.2023 17:50

    Название статьи не отражает сути, почитайте чуть больше про этот план.


  1. ogregor
    28.11.2023 17:50
    +1

    Вью хорош темплейт движком. Реакт возможностью работы с mobx. Мне не нравится во Вью что доступ к свойству идёт через .value приходилось переписывать много бизнес логики с вью фронтенда на react native mobx и честно .value добавляет ненужных движений. Как по мне идеально это темплейт вью + стейт mobx. (Это если абстрагироваться от внутренних реализаций реактивности и рендеринга.)


    1. DmitryOlkhovoi
      28.11.2023 17:50

      Дело в том, что вью с коробки, это реакт с mobx и ещё кучей либ.

      Можно обойтись и без .value если там объект. Ну а если подумать про реакт без mobile, то там вообще на одно реактив вейлю две переменных, одна ещё и функция. Сам работаю с двумя фреймворками, вью просто приятней в мелочах. Скоупед стили из коробки, ивенты на компоненты и так далее


    1. zede
      28.11.2023 17:50

      В целом уверен что сдружить их возможно. Но как писали ниже, то есть реактивные примитивы как Reactive которые могут прятать все эти .value. Однако, если вам не переписывать с React на Vue, то лучше принять .value. От нее пытались избавиться на этапе сборки но это порождало слишком много магии и дополнительных корнер кейсов проблемного вида


    1. gmtd Автор
      28.11.2023 17:50
      +1

      У Vue самый правильный, самый удобный вариант обращения с реактивными данными. Нужно понять, что переменная с реактивным состоянием - это не то же самое, что обычная переменная. К реактивному состоянию доступ должен быть через интерфейс - это и есть .value. Я не знаю библиотек, в которых бы было более правильней и в то же время проще обращение с реактивными данными. Нужно просто осознать эту философию.


      Даже svelte долго терпел, но тоже переходит на раздельное обращение с данными в новой версии



      1. c01nd01r
        28.11.2023 17:50

        Вот бы ещё шаблоны знали про это (в частности пропсы дочерних компонентов), а не разворачивали рефы в реактивные свойства.

        Понятно зачем оно так сделано, но хочется более явных вещей, тем более и так уже через .value работаем.


    1. hulki
      28.11.2023 17:50

      Тогда можно использовать Vue macros там есть Reactivity Transform


      1. gmtd Автор
        28.11.2023 17:50

        Reactivity Transform уже нету
        Отказались от него


        1. hulki
          28.11.2023 17:50

          В core да отказались но в Vue macros есть


  1. zede
    28.11.2023 17:50
    +2

    Сюда же можно отнести как оперативно vitest захватывает поле еще одного "монополиста" в виде Jest-а активно смещая его позиции. Да, фокус команды в этом году был явно не на стороне Vue (что понятно по отсутствию обещанного Vapor Mode)

    Так же недооценено влияние языкового туллинга как Volar который тоже выходит за пределы Vue уже. Например языковой туллинг Svelte уже на нем.

    Итого по векторам суммируя:

    1. Frontend Framework - Vue

    2. SSR Framework - Nuxt

    3. SSG / Static Sites - Vitepress

    4. STM - Pinia / @vue/reactivity

    5. Builder - Vite

    6. Test - Vitest

    7. CSS framework - UnoCSS (убийца тейлвинда)

    8. Linting / Formating - Stylistic / antfu-eslint-config

    9. Language Tools - Volar

    10. Презентации - Slidev

    11. common web tasks - unjs

    12. И уверен что я много чего еще пропустил

    Чего же тут не хватает?

    Как по мне дико не хватает качественной UI-библиотеки. Вот чтоб от создателей со всей той любовью к DX-у что и в других продуктах от этих ребят. Именно в области UI-библиотек сейчас САМОЕ слабое место у Vue. Пока пытается это исправить только Nuxt со своим Nuxt UI, но он завязан на Nuxt экосистему и вне Nuxt не жизнеспособен сейчас, поэтому пользы мало.

    Если появится что-то по кач-ву близкое или превосходящее условный Mantine, то это даст невероятный буст всей экосистеме


    1. gmtd Автор
      28.11.2023 17:50

      Еще члены core team Vue и Vite работают над Cypress и Astro.

      Исходники Vapor mode на днях открыли, так что работа там идет. Хотя это уже полировка оптимизации, на среднем проекте разницы заметно не будет.

      С UI библиотеками тоже не вижу проблем. Дизайнерские проекты с Фигмы все равно свою стилизацию используют, а для стандартных админок хватит стандартных Quasar или PrimeVue

      При желании можно взять что угодно и перенести соответствующие стили компонентов Mantine, если уж так хочется

      Вообще в проекте обычного вебприложения не так уж и много визуальных компонент используется. Можно ручками сделать красиво.

      За напоминание о UnoCSS  - спасибо, действительно забыл это важное направление.


      1. zede
        28.11.2023 17:50

        кстати да Astro тоже на основе Volar-а сделан


    1. c01nd01r
      28.11.2023 17:50

      В плане UI библиотек Vue действительно не так хорошо выглядит на фоне React, но тем не менее, есть те же AntD и Radix UI.


    1. Fragster
      28.11.2023 17:50

      Лично я использую quasar.dev и почти все нормально. Правда это чуть больше, чем ui библиотека, но это часто даже удобнее, тем более что есть вариант использования компонентов отдельно от всего комбайна.


  1. sentbegemot
    28.11.2023 17:50
    +1

    И все таки я бы не стал упоминать план Барбароса просто так. Уж очень нехороший был план...


    1. gmtd Автор
      28.11.2023 17:50

      Не проводя прямых аналогий и абстрагируясь от того, что мне нравится Vue, из его экосистемы вышли реально крутые продукты, вы считаете подобную активность по расширению и используемые его командой методы правильными?

      Google is not evil?