Telegram Group Search
Опубликовали результаты опроса State of Vue.js 2025

Довольно много информации, надо самому смотреть

Удивили данные по "custom composables" aka "модульные / глобальные рефы" - занимают уже половину от рынка Pinia. Народ умнеет.

#stats
Я писал не так давно про MCP и их потенциально большую роль в будущем, и тут вот уже что появилось:

vite-plugin-vue-mcp

MCP сервер в форме Vite плагина, который позволяет AI агенту IDE запрашивать данные о твоем Vue проекте

Грубо говоря, если агенту понадобится информация о роутах проекта, он не будет ползать по всей твоей кодовой базе, парся файлы, а получит информацию сразу в структурированном виде. Что намного быстрей и эффективней.

Полезность конкретно этой штуки нуждается, конечно, в проверке, но начало положено.

#ai
Совсем недавно вышла Mistral OCR - первая LLM для качественного парсинга картинок и pdf с картинками

Подключил её в Lissa.

Отлично распознает. Бесплатно. Без лимитов. С санкционной территории работает. Где подстава пока не пойму...

Мучения с Tesseract и Ко закончились, хотя оставил их на фолбэк.

#ocr #ai
Кто не знал, есть в VS Code (Volar) такая команда

Разделяет на два окна один файл по секциям SFC

#vscode
Деривативом к Lissa Health создался телеграмный ботик для AI распознавания текста на фото и картинках

@argus_ocr_bot

Позволяет задать один уточняющий вопрос после распознавания для фильтрации данных, форматирования, перевода на другой язык или еще чего-то

Примеры:
1. Сфотографировать квитанцию СДЭК => Оставь только номер отправления
2. Сфотографировать визитку => Сделай json
3. Сфотографировать непонятный текст => Переведи на русский

Критика и предложения welcome

#lissa #tgbot #argus
Хех... Эван прочел этот пост, но один "meta" все же лишний

Иначе Laravel - это мета-фреймворк над Symfony

#vite #evanyou
При использовании сторов иногда получаются проблемы из-за перекрестных ссылок, которые дают ReferenceEror

При использовании модульных рефов может возникнуть аналогичная ситуация - например, когда переменная refA определяется в модуле А, который использует модуль B, а B вешает watch на refA. Причем это применимо только к системе реактивности Vue, потому что с обычными объектами такой проблемы нет.

#store #reactivity #architecture
Решения для проблемы выше

1. Переделать. Перекрестное использование сущностей - архитектурно плохая практика. Каждая должна содержать в себе только свое состояние и логику работы с собой. Если А использует B, значит B - утилитарен по отношению к А (например, А - какой-то бизнесовый стор, B - отвечает за открытие диалогов). Но тогда коду из А нечего делать в B.

К созданию сторов / модульных рефов надо подходить так же ответственно, как к проектированию схемы реляционной базы данных. Это координатный базис, и в нем не может быть перекрестных зависимостей.

Если есть логика, которая работает и с А, и с B, то, скорей всего, она прикладная для этих сторов, и должна лежать в отдельной сущности (компоненте, композабле, простом или реактивном модуле, сторе).

2. setTimeout / nextTick, как на картинке. Работает и с модульными рефами, но выглядит уродливым костылём

3. Шина событий (eventBus) для сообщений между сторами. Как самостоятельное решение возможно, но в данном случае опять же костыль.

4. Если refA в примере вынести в отдельный модуль, то ошибка пропадет. То же самое, скорей всего, справедливо и для сторов, но будет выглядеть неуклюже. Выносить надо не голый стейт, а разделять стор грамотно, по ответственности.

5. Не надо пихать реактивность туда, где можно обойтись без нее. Если переменная B зависит от А, и источников изменения А всего один-два, то необязательно ставить watch над А в B, можно обновлять B императивно напрямую. Это уберет прямую зависимость от А в B (если код в А уже как-то использует B), а также повысит читаемость и производительность. В первую очередь касается кода, который работает с бэкенд API.
Так же приоритетно, как и пункт 1.

#store #reactivity #architecture
В Твиттере обсуждение большого поста разработчика OpenNext (инициативы по облегчению деплоя Next приложений куда-то окромя Vercel)

Отмазывает компанию, говорит, всё это случайности, а не злой умысел. Что в Next.js было мало намеренных изменений, ломающих совместимость, но много ненамеренных багов при обновлениях версий.

Пишет, что Next.js стал популярным благодаря своим достоинствам, но в какой-то момент его "перепродвигали" из-за больших вложений в маркетинг. Теперь разработчики начинают понимать, что Next.js не всегда подходит для их задач. Предостерегает от того, чтобы называть тех, кто чувствует странности в продвижении Next.js, теоретиками заговора

Что сейчас у Vercel небольшая команда по связям с разработчиками (DevRel), и они не платят инфлюенсерам за продвижение. Однако раньше это было не так - Vercel активно спонсировал людей, как официально, так и неофициально.

#react #sst #nextjs #spa
Хорошая статья по использованию ИИ в программировании

Особенно, Заключение

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

Политика "одноразовых" продуктов из внешнего мира приходит в IT

#ai
Вспомнил, что истекли 30 суток моего карцера на @vuejs_ru

Что-то важное пропустил?

#vuejs_ru
Если у вас есть массив, в каждом элементе которого есть computed, то лучше создать один на весь массив, чем много для каждого элемента

// Bad
const rows = productRows.map(row => ({
...row,
total: computed(() => row.price * row.qty),
}));


// Good
const computedRows = computed(() =>
productRows.map(row => ({
...row,
total: row.price * row.qty,
}))
);


#tip #performance #reactivity
Кевин Денг (создатель Vapor) получил ежемесячное спонсорство от VoidZero в размере $1024

Еще столько же дают совместно Эван и Vue.js, и еще около $1000 все остальные

Прошлой осенью Кевин жаловался, что ему не на что содержать семью, и поэтому он забросил Vapor

Как и ожидалось, Эван использует полученные VoidZero инвестиции для вознаграждения работающим во Vue и Vite экосистемах людям, но как-то уж очень экономно он это делает.

#vapor #voidzero
2025/05/20 02:03:49
Back to Top
HTML Embed Code: