smartbundle – Telegram
https://github.com/XaveScor/smartbundle/releases/tag/v0.12.1

v0.12.1

В этом релизе доправлена проверка испортов тайпингов. Теперь сборка падает, если после установки пакета тайпинги у пользователя не были корректно установлены.

Эта ошибка произошла на практике у https://github.com/artalar/eslint-plugin-react-component-name/pull/2
Вообще пора проводить уборку. Багов образовалось достаточно. Думаю, что новогодние праздники будут посвящены как раз работе над ошибками.

Примерный план работ:
- смартбандл использует немного кастомные правила витеста, которые, оказывается, работают некорректно. Последний релиз я делал на другой машине, что привело к полной перегенерации снепшотов
- один из релизов добавил поддержку tsx, но только для реакта. Оказалось, что реакт - это не единственный таргет для jsx, который нужен пользователям. В патчах добавлю позвожность руками управлять генерацией jsx
- Так же есть кейс, в котором бандл генерируется неприлично долго. Больше 1 минуты. Проблемы с производительностью - это тоже важная проблема

Это кажется немного, но в реальности сурово вставляет палки в колёса как мне, так и пользователям

Но вообще задачи можно глянуть тут https://github.com/XaveScor/smartbundle/issues?page=1&q=is%3Aissue+is%3Aopen. Я стараюсь вести все задачи и решения максимально открыто
v0.12.3

https://github.com/XaveScor/smartbundle/releases/tag/v0.12.3

Решена проблема оочень долгой генерации бандла в некоторых проектах.

Никогда не читайте рекурсивно директории, если там может оказаться node_modules. Теперь эта директория игнорируется и всё работает куда быстрее
🔥3
v0.12.4

https://github.com/XaveScor/smartbundle/releases/tag/v0.12.4

В этом патче смартбандл явно требует пользователей использовать verbatimModuleSyntax: true в tsconfig.json, если используется ts.
Это требовалось де-факто и в предыдущих версиях, но никак не проверялось бандлером.

Проблема в том, что vite и прочие тулы обрабатывают файлы независимо друг от друга и никак не могут понять по import A from B была импортирована сущность или тип. Поэтому смартбандл до этой версии ломался есть у вас есть import Type без type импорта, так как ломался vite.
Теперь бандл даже не начнётся, если вы не добавите настроек в tsconfig
В следующем миноре смартбандл научится проверять корректность импортов + сможет в красивые ошибки.

Подобный механизм ошибок постепенно прорастёт во все места, где он будет применим
🔥2👏1
Чуток хочу поработать над рекламой смартбандла, и v0.13.0 будет посвещена именно этому.

Я форкнул json-to-ast, так как эта библиотека понадобится мне в будущих версиях смартбандла. На примере этой библиотеки как раз и хочется показать насколько смартбандл удобен
https://github.com/XaveScor/json-to-ast-es/commit/48d5861529e664c9b2adeb84f5d8e92398f3b997#diff-bc37d034bad564583790a46f19d807abfe519c5671395fd494d8cce506c42947

Никаких конфигов. Никакого мусора в package.json

Но по-факту всё работает как и раньше.
v0.13.0

https://github.com/XaveScor/smartbundle/releases/tag/v0.13.0

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

- Как оказалось pnpm протекает в изоляции библиотек, поэтому изменён механизм детекции тайпскрипта. Теперь режим ts будет включаться только при наличии ts'a в package.json
А так же тупая история: я тут случайно обнаружил, что смартбандл попробовали заиспользовать в https://github.com/r13v/create-slot, но в итоге отказались в пользу tsup.

Ошибка оказалась максимально тупая: так как я добавлял поддержку реакта не сразу, то я забыл включить в проверку энтрипоинтов расширения *.tsx и проверяю только *.ts. В итоге тайпинги для tsx не собираются.
Исправлю в следующем патче.

Если же у вас возникли проблемы - не стесняйтесь писать. Помогу, поправлю ошибки, добавлю нужные фичи.
👍1
smartbundle
А так же тупая история: я тут случайно обнаружил, что смартбандл попробовали заиспользовать в https://github.com/r13v/create-slot, но в итоге отказались в пользу tsup. Ошибка оказалась максимально тупая: так как я добавлял поддержку реакта не сразу, то я…
Из приятного: смартбандл уже лучше чем tsup(когда работает). К примеру, у https://github.com/r13v/create-slot прямо сейчас есть бага, которую ни линтер, ни tsup не отловил.

Тайпинги попросту работать у пользователя не будут, так как @types/react не будет установлен в окружении пользователя, из-за чего все импорты из "react" будут резолвиться в any.
🔥4
v0.14.0

https://github.com/XaveScor/smartbundle/releases/tag/v0.14.0

Так как наконец-то вышел vitest@3, то это сняло все ограничения по переходу на новую версию vite

В этом релизе обновлены все зависимости. Теперь смартбандл работает на vite 6 и vitest 3.
Если вы используете vitest у себя в проекте, то потребуется обновлить vitest до 3 версии для корректной работы.
🔥3
https://github.com/XaveScor/smartbundle

Нет релиза, но я последний месяц активно играюсь с нейронками, поэтому предлагаю вам оценить новый вид документации. Оценка в комментариях с критикой приветствуется

В ней так же дофига минусов, но теперь дока будет первостепенна над фичами
👍5
Иногда, если нейронки чуток "настроить", то они демонстрируют вполне неплохие вещи, однако

Как минимум упрощает работу
👍4
Прямо сейчас мой базовый промпт для написания тестов в смартбандле выглядит так https://github.com/XaveScor/smartbundle/blob/master/prompts/test.md

Увы, но нейронки тупые, чтобы самим выводить эти правила. Пришлось отдельно поработать и помочь им
👍3
v0.14.1

https://github.com/XaveScor/smartbundle/releases/tag/v0.14.1

- Исправлена ошибка валидации. Теперь пользователь обязан указать или exports, или bin. Т.е. для сборки требуется хотя бы 1 энтрипоинт
https://github.com/XaveScor/smartbundle/blob/145-build-release-modes/docs/modes.md

Я тут работаю над build/release модами, так как это требуется для корректной работы поддержки монореп. Пока есть такая дока.

Хочется послушать критику для этого решения, так как я до последнего оттягивал release режим смартбандла, но увы, его придётся сделать.
Хотелось бы сказать что я плюнул на смартбандл, но нет. Сейчас работаю над поддержкой монореп.

И хочется поныть, что ребята из pnpm чуток плохие ребята, так как "dep": "*" считается ссылкой именно на пакет в npm, даже если пакет с таким именем есть в монорепе. И для корректной работы надо писать "dep": "workspace:*".

Паубывал бы за то, что приходится для каждого окружения писать свои костыли, чтобы оно работало нормально.
😨53👍1🔥1
В итоге поддержка монореп затянулась. Но первый пошёл https://github.com/reatom/reatom/pull/1166

Думаю до конца недели затащить. Нашёл пару минорных багов, которые не так сложно пофиксить
🔥3
Сейчас идёт финализация дизайна монореп в смартбандле. Осталось только норм логи прикрутить.

И я начинаю понимать, что для современной либы ровно 0 причин чтобы её хранить не в формате монорепы. С монорепой:
а) релизы проще. Просто пишешь pnpm publish и всё релизится
б) добавление новых пакетов упрощается. К примеру, хочешь сделать синтаксис npm init <libname>. Всё равно придётся переходить к монорепе, чтобы создать пакет create-<libname>
в) Захочешь вынести чуток вовне логику - опять будет проще создать пакет. К примеру мне нужна отдельная команда smartbundle-monorepo-link.
и т.д. и т.п.

Минусы же минорны - нужно просто понимать как работают монорепы
🔥3👀21