Привет всем присоединившимся.
Расскажу из интересного про последний релиз.
Основной темой v0.8.0 была поддержка https://metrobundler.dev. Эта штука используется для сборки React Native приложений.
И вот веселье:
- metro умеет только в cjs
- metro не умеет в exports из package.json
Это привело к тому, что пришлось переделывать сгенерированный package.json почти полностью. Но, теперь можно добавлять ещё одну галочку в список поддерживаемых и тестируемых таргетов
Кроме того получилось найти неприятную багу https://github.com/facebook/metro/issues/1379. Жду пока поправят, чтобы добавить этот режим в мою тестсетку
Расскажу из интересного про последний релиз.
Основной темой v0.8.0 была поддержка https://metrobundler.dev. Эта штука используется для сборки React Native приложений.
И вот веселье:
- metro умеет только в cjs
- metro не умеет в exports из package.json
Это привело к тому, что пришлось переделывать сгенерированный package.json почти полностью. Но, теперь можно добавлять ещё одну галочку в список поддерживаемых и тестируемых таргетов
Кроме того получилось найти неприятную багу https://github.com/facebook/metro/issues/1379. Жду пока поправят, чтобы добавить этот режим в мою тестсетку
Из текущих либ, куда smartbundle затащен или дебажил проблемы.
Используется:
https://github.com/Voiso/rx-sample
https://github.com/artalar/react-router-typed-object
Дебажил проблемы:
- https://github.com/kireevmp/effector-apollo/pull/1
- https://github.com/DKeken/effector-tma/pull/3
И уже есть договорённость, что смартбандл может стать основным бандлером для библиотек reatom.dev и effector.dev, если будут выполнены некоторые необходимые фичи
Используется:
https://github.com/Voiso/rx-sample
https://github.com/artalar/react-router-typed-object
Дебажил проблемы:
- https://github.com/kireevmp/effector-apollo/pull/1
- https://github.com/DKeken/effector-tma/pull/3
И уже есть договорённость, что смартбандл может стать основным бандлером для библиотек reatom.dev и effector.dev, если будут выполнены некоторые необходимые фичи
GitHub
GitHub - Voiso/rx-sample: rx-sample is a utility for working with RxJS in conjunction with Effector, making it easy to manage subnoscriptions…
rx-sample is a utility for working with RxJS in conjunction with Effector, making it easy to manage subnoscriptions to Observables using Effector events. - Voiso/rx-sample
v0.8.1
Добавлена поддержка ts<=4.3.
https://github.com/XaveScor/smartbundle/pull/79
Проблема в том, что начиная с ts4.4 существуют named экспорты, а до этой версии все методы находились в поле default, что и роняло TS на <=v0.8.0
Решение донельзя простое, но и тупое, так как типов в
Добавлена поддержка ts<=4.3.
https://github.com/XaveScor/smartbundle/pull/79
Проблема в том, что начиная с ts4.4 существуют named экспорты, а до этой версии все методы находились в поле default, что и роняло TS на <=v0.8.0
Решение донельзя простое, но и тупое, так как типов в
typeof import("typenoscript")['default'] теперь не существуетv0.9.0
Отрефакторил получаемый бандл. Если "до" структура результирующего бандла была хаотичной для внешнего наблюдателя, то в v0.9.0 бандл теперь зеркалит структуру исходников.
Это должно упростить дебаг собранных библиотек в разы.
Так же приятным сайд эффектом является то, что я покрыл тестами все возможные варианты импортов(их оказалось 6) во всех тестируемых таргетах. Теперь они работают гарантированно во всех ситуациях.
Посравнивать результирующий бандл можно по ссылкам:
До: https://www.npmjs.com/package/smartbundle/v/0.8.1?activeTab=code
После: https://www.npmjs.com/package/smartbundle/v/0.9.0?activeTab=code
Отрефакторил получаемый бандл. Если "до" структура результирующего бандла была хаотичной для внешнего наблюдателя, то в v0.9.0 бандл теперь зеркалит структуру исходников.
Это должно упростить дебаг собранных библиотек в разы.
Так же приятным сайд эффектом является то, что я покрыл тестами все возможные варианты импортов(их оказалось 6) во всех тестируемых таргетах. Теперь они работают гарантированно во всех ситуациях.
Посравнивать результирующий бандл можно по ссылкам:
До: https://www.npmjs.com/package/smartbundle/v/0.8.1?activeTab=code
После: https://www.npmjs.com/package/smartbundle/v/0.9.0?activeTab=code
npm
npm: smartbundle
zero-config bundler for npm packages. Latest version: 0.9.0, last published: 7 minutes ago. Start using smartbundle in your project by running `npm i smartbundle`. There are no other projects in the npm registry using smartbundle.
И что же это за 6 кейсов? Их можно увидеть в библиотеке, которую я использую для тестов таргетов: https://github.com/XaveScor/smartbundle/blob/a4dbef52622d2d5afb7a40df57399603789467f0/e2e/test-lib/package.json
Это всё важно проверять, так как у нас есть "особенные" webpack4 и metro, которые не умеют в package.json@exports. Из-за чего мне пришлось создавать файлы с реэкспортами для каждого "виртуального" пути(ключи в exports), так как webpack4 и metro тупо смотрят в файловую систему.
Это всё важно проверять, так как у нас есть "особенные" webpack4 и metro, которые не умеют в package.json@exports. Из-за чего мне пришлось создавать файлы с реэкспортами для каждого "виртуального" пути(ключи в exports), так как webpack4 и metro тупо смотрят в файловую систему.
Небольшое описание для вновь прибывших.
Канал о разработке бандлера для npm библиотек. https://github.com/XaveScor/smartbundle
Заметки, описания релизов и что-то об этом
Канал о разработке бандлера для npm библиотек. https://github.com/XaveScor/smartbundle
Заметки, описания релизов и что-то об этом
GitHub
GitHub - XaveScor/smartbundle: Just Code, No Configs. The Library Bundler That Respects Your Time
Just Code, No Configs. The Library Bundler That Respects Your Time - XaveScor/smartbundle
smartbundle pinned «Небольшое описание для вновь прибывших. Канал о разработке бандлера для npm библиотек. https://github.com/XaveScor/smartbundle Заметки, описания релизов и что-то об этом»
v0.10.0
https://github.com/XaveScor/smartbundle/releases/tag/v0.10.0
Добавил начальную поддержку сорсмапов. Могут не работать, а могут и работать. Пока без тестов
А так же наконец-то добавил покрытие тестами для тайпскрипта. Теперь основные варианты конфигов TS работают и, самое главное, тестируются. Огромное спасибо за эту часть @kireevmp и его проекту https://github.com/kireevmp/effector-apollo. Без него я бы к покрытию тайпскрипта долго бы ещё не приступал.
Из интересного: я возненавидел node10 таргет, так как он выдаёт абсолютно тупую и нечитаемую ошибку. Провёл пару часов с chatgpt и claude, которые нифига не смогли помочь и в итоге случайно, методом тыка сумел найти решение. И самое обидное, что оно абсолютно такое же как и для вебпак4 и metro - просто докинуть тайпинги в виртуальную ФС, которая описывается экспортами. И всё работает(Но это не точно).
https://github.com/XaveScor/smartbundle/releases/tag/v0.10.0
Добавил начальную поддержку сорсмапов. Могут не работать, а могут и работать. Пока без тестов
А так же наконец-то добавил покрытие тестами для тайпскрипта. Теперь основные варианты конфигов TS работают и, самое главное, тестируются. Огромное спасибо за эту часть @kireevmp и его проекту https://github.com/kireevmp/effector-apollo. Без него я бы к покрытию тайпскрипта долго бы ещё не приступал.
Из интересного: я возненавидел node10 таргет, так как он выдаёт абсолютно тупую и нечитаемую ошибку. Провёл пару часов с chatgpt и claude, которые нифига не смогли помочь и в итоге случайно, методом тыка сумел найти решение. И самое обидное, что оно абсолютно такое же как и для вебпак4 и metro - просто докинуть тайпинги в виртуальную ФС, которая описывается экспортами. И всё работает(Но это не точно).
👍1
v0.10.1
https://github.com/XaveScor/smartbundle/releases/tag/v0.10.1
Этот релиз посвещён работе библиотек в IDE. В вебшторме всё работало корректно, но в VSCode https://github.com/kireevmp/effector-apollo отказался резолвиться в разных таргетах.
Оказалось, что VSCode использует какой-то свой конфиг для тайпскрипта, который не умеет резолвить код, который собирается при moduleResolution: bundler и Node10.
Этот патч меняет генерацию тайпингов, чтобы либа работала корректно в основных IDE.
====
Если у вас есть библиотеки, где бы вы хотели делегировать всю эту головную боль, то не стесняйтесь писать сюда в комментарии или же ко мне в личку @XaveScor
https://github.com/XaveScor/smartbundle/releases/tag/v0.10.1
Этот релиз посвещён работе библиотек в IDE. В вебшторме всё работало корректно, но в VSCode https://github.com/kireevmp/effector-apollo отказался резолвиться в разных таргетах.
Оказалось, что VSCode использует какой-то свой конфиг для тайпскрипта, который не умеет резолвить код, который собирается при moduleResolution: bundler и Node10.
Этот патч меняет генерацию тайпингов, чтобы либа работала корректно в основных IDE.
====
Если у вас есть библиотеки, где бы вы хотели делегировать всю эту головную боль, то не стесняйтесь писать сюда в комментарии или же ко мне в личку @XaveScor
GitHub
Release v0.10.1 · XaveScor/smartbundle
What's Changed
84: vscode correct imports in .d.ts files by @XaveScor in #85
Full Changelog: v0.10.0...v0.10.1
84: vscode correct imports in .d.ts files by @XaveScor in #85
Full Changelog: v0.10.0...v0.10.1
https://github.com/XaveScor/vitest-directory-snapshot/pull/2
Перевёл одну из либ на смартбандл с микробандла, которую делал для тестирования смартбандла.
Это прямо кайф. Я помню как дня 3-4 мудохался, чтобы завести типы корректно. Но, спойлер, так и не справился. Поэтому прямо сейчас в кодовой базе смартбандла очень много // @ts-expect-error.
Но теперь и node_modules стал меньше, сборка быстрее и корректнее.
Перевёл одну из либ на смартбандл с микробандла, которую делал для тестирования смартбандла.
Это прямо кайф. Я помню как дня 3-4 мудохался, чтобы завести типы корректно. Но, спойлер, так и не справился. Поэтому прямо сейчас в кодовой базе смартбандла очень много // @ts-expect-error.
Но теперь и node_modules стал меньше, сборка быстрее и корректнее.
В ближайшем релизе собираюсь выкатить поддержку реакта, а пока поражаюсь насколько хорошо разные пакеты, не договариваясь, поставляют компиляторы для своих языков:
svelte -> svelte/compiler
vue -> vue/compiler
effector -> effector/babel-plugin
Это очень упрощает жизнь пользователю в рамках смартбандла, так как для поддержки vue, к примеру, достаточно попоросить пользователя добавить vue в зависимости. Компилятор приедет незаметно для пользователя и смартбандл его заиспользует в своей сборке.
svelte -> svelte/compiler
vue -> vue/compiler
effector -> effector/babel-plugin
Это очень упрощает жизнь пользователю в рамках смартбандла, так как для поддержки vue, к примеру, достаточно попоросить пользователя добавить vue в зависимости. Компилятор приедет незаметно для пользователя и смартбандл его заиспользует в своей сборке.
v0.11.0
https://github.com/XaveScor/smartbundle/releases/tag/v0.11.0
Это большой релиз, относительно других версий.
Основное:
- Появилась поддержка бабеля
- Появилась поддержка реакта
- Смартбандл наконец-то самостоятельно выводит информацию по сборке, а не просто транслирует то что выдаёт vite
Поддержка бабеля и реакта сделана максимально просто со стороны пользователя: просто установи зависимость и всё заработает автоматически. Причём смартбандл проверяет версию реакта и по-разному собирает jsx. Если < 17, то в React.createElement. Если >= то в jsx/runtime. Подробнее тут https://github.com/XaveScor/smartbundle/blob/v0.11.0/docs/react.md
Все последующие интеграции будут добавляться по такому же принципу: ставишь зависимость и всё работает.
https://github.com/XaveScor/smartbundle/releases/tag/v0.11.0
Это большой релиз, относительно других версий.
Основное:
- Появилась поддержка бабеля
- Появилась поддержка реакта
- Смартбандл наконец-то самостоятельно выводит информацию по сборке, а не просто транслирует то что выдаёт vite
Поддержка бабеля и реакта сделана максимально просто со стороны пользователя: просто установи зависимость и всё заработает автоматически. Причём смартбандл проверяет версию реакта и по-разному собирает jsx. Если < 17, то в React.createElement. Если >= то в jsx/runtime. Подробнее тут https://github.com/XaveScor/smartbundle/blob/v0.11.0/docs/react.md
Все последующие интеграции будут добавляться по такому же принципу: ставишь зависимость и всё работает.
Работа с зависимостями - это какая-то жопа.
Пришёл один пользователь и говорит, что у него npx падает, если пакет через pnpm установлен.
Другой - а вот у тебя бабель ставится, который в optionalDeps указан.
Пришёл один пользователь и говорит, что у него npx падает, если пакет через pnpm установлен.
Другой - а вот у тебя бабель ставится, который в optionalDeps указан.
🌚1