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
Внезапно обнаружил, что кто-то самостоятельно заюзал смартбандл у себя в проекте без любой из связей со мной. Т.е. человек сам принял решение и разобрался. Приятно.
https://github.com/winterzz-dev/valibot-pretty-error
Правда нашёл несколько косяков: нужно запретить писать main и убрать из доки npx, чтобы люди не запускали через него смартбанд.
А так - я прямо доволен. Значит не дичь пилю.
https://github.com/winterzz-dev/valibot-pretty-error
Правда нашёл несколько косяков: нужно запретить писать main и убрать из доки npx, чтобы люди не запускали через него смартбанд.
А так - я прямо доволен. Значит не дичь пилю.
GitHub
GitHub - winterzz-dev/valibot-pretty-error
Contribute to winterzz-dev/valibot-pretty-error development by creating an account on GitHub.
👍1
v0.11.1
https://github.com/XaveScor/smartbundle/releases/tag/v0.11.1
Оказывается, менеджеры пакетов весьма вольно распоряжаются зависимостями, особенно теми, которые находятся в optionalDeps. Pnpm, к примеру, может просто так их установить, потому что считает, что они нужны.
Вынес в итоге ts и @babel/core в peerDeps. Теперь они не ставятся, если у пользователя нет явной зависимости на эти пакеты
https://github.com/XaveScor/smartbundle/releases/tag/v0.11.1
Оказывается, менеджеры пакетов весьма вольно распоряжаются зависимостями, особенно теми, которые находятся в optionalDeps. Pnpm, к примеру, может просто так их установить, потому что считает, что они нужны.
Вынес в итоге ts и @babel/core в peerDeps. Теперь они не ставятся, если у пользователя нет явной зависимости на эти пакеты
GitHub
Release v0.11.1 · XaveScor/smartbundle
What's Changed
104: move optional deps to peerDeps to avoid the random installation not required modules into user's libs by @XaveScor in #105
Please reinstall smarbundle if you have unwa...
104: move optional deps to peerDeps to avoid the random installation not required modules into user's libs by @XaveScor in #105
Please reinstall smarbundle if you have unwa...
smartbundle
v0.11.1 https://github.com/XaveScor/smartbundle/releases/tag/v0.11.1 Оказывается, менеджеры пакетов весьма вольно распоряжаются зависимостями, особенно теми, которые находятся в optionalDeps. Pnpm, к примеру, может просто так их установить, потому что считает…
https://news.1rj.ru/str/xavescor_code/233
Ну и вот описание проблемы почему бабель и тс насильно ставился пользователям смартбандла
Ну и вот описание проблемы почему бабель и тс насильно ставился пользователям смартбандла
Telegram
Андруша пишет код
Зависимости
package.json - это место, где мне всегда нужно лезть в доку, так как я критически не могу угадать по названию что делает тот или иной ключ.
А так как я пишу бандлер для либ, то это бесит просто донельзя.
Из последнего: мне нужно описать список…
package.json - это место, где мне всегда нужно лезть в доку, так как я критически не могу угадать по названию что делает тот или иной ключ.
А так как я пишу бандлер для либ, то это бесит просто донельзя.
Из последнего: мне нужно описать список…
https://github.com/XaveScor/smartbundle/releases/tag/v0.12.0
Промежуточная, но важная версия
- отвязана генерация .d.ts от сборки vite
- флаг --seq, для последовательного выполнения сборки, что позводит дебажить производительность смартбандла
- исправлена генерация .d.ts. Теперь файлы правятся не регулярками, а через преобразования AST дерева
Эти изменения нужны для следующей v0.13, которая расширит синтаксис exports, сделав его ближе к полной спецификации.
Промежуточная, но важная версия
- отвязана генерация .d.ts от сборки vite
- флаг --seq, для последовательного выполнения сборки, что позводит дебажить производительность смартбандла
- исправлена генерация .d.ts. Теперь файлы правятся не регулярками, а через преобразования AST дерева
Эти изменения нужны для следующей v0.13, которая расширит синтаксис exports, сделав его ближе к полной спецификации.
GitHub
Release v0.12.0 · XaveScor/smartbundle
What's Changed
110: upgrade deps by @XaveScor in #111
112 --seq by @XaveScor in #113
115: make ts and vite parallel + move vscode fix to ast parser by @XaveScor in #116
109: validate dependenc...
110: upgrade deps by @XaveScor in #111
112 --seq by @XaveScor in #113
115: make ts and vite parallel + move vscode fix to ast parser by @XaveScor in #116
109: validate dependenc...
Чат, как бы вы отнеслись, если бандлер будет заставлять вас прописывать
Если ты используешь апишки ноды
engines: {
"node" >= 12
}
Если ты используешь апишки ноды
https://github.com/XaveScor/smartbundle/releases/tag/v0.12.1
v0.12.1
В этом релизе доправлена проверка испортов тайпингов. Теперь сборка падает, если после установки пакета тайпинги у пользователя не были корректно установлены.
Эта ошибка произошла на практике у https://github.com/artalar/eslint-plugin-react-component-name/pull/2
v0.12.1
В этом релизе доправлена проверка испортов тайпингов. Теперь сборка падает, если после установки пакета тайпинги у пользователя не были корректно установлены.
Эта ошибка произошла на практике у https://github.com/artalar/eslint-plugin-react-component-name/pull/2
v0.12.2
https://github.com/XaveScor/smartbundle/releases/tag/v0.12.2
- в бандл теперь копируются файлы LICENSE и LICENSE.txt
https://github.com/XaveScor/smartbundle/releases/tag/v0.12.2
- в бандл теперь копируются файлы LICENSE и LICENSE.txt
GitHub
Release v0.12.2 · XaveScor/smartbundle
What's Changed
114: add license and license.txt static file to the bundle by @XaveScor in #127
Full Changelog: v0.12.1...v0.12.2
114: add license and license.txt static file to the bundle by @XaveScor in #127
Full Changelog: v0.12.1...v0.12.2
Вообще пора проводить уборку. Багов образовалось достаточно. Думаю, что новогодние праздники будут посвящены как раз работе над ошибками.
Примерный план работ:
- смартбандл использует немного кастомные правила витеста, которые, оказывается, работают некорректно. Последний релиз я делал на другой машине, что привело к полной перегенерации снепшотов
- один из релизов добавил поддержку tsx, но только для реакта. Оказалось, что реакт - это не единственный таргет для jsx, который нужен пользователям. В патчах добавлю позвожность руками управлять генерацией jsx
- Так же есть кейс, в котором бандл генерируется неприлично долго. Больше 1 минуты. Проблемы с производительностью - это тоже важная проблема
Это кажется немного, но в реальности сурово вставляет палки в колёса как мне, так и пользователям
Но вообще задачи можно глянуть тут https://github.com/XaveScor/smartbundle/issues?page=1&q=is%3Aissue+is%3Aopen. Я стараюсь вести все задачи и решения максимально открыто
Примерный план работ:
- смартбандл использует немного кастомные правила витеста, которые, оказывается, работают некорректно. Последний релиз я делал на другой машине, что привело к полной перегенерации снепшотов
- один из релизов добавил поддержку tsx, но только для реакта. Оказалось, что реакт - это не единственный таргет для jsx, который нужен пользователям. В патчах добавлю позвожность руками управлять генерацией jsx
- Так же есть кейс, в котором бандл генерируется неприлично долго. Больше 1 минуты. Проблемы с производительностью - это тоже важная проблема
Это кажется немного, но в реальности сурово вставляет палки в колёса как мне, так и пользователям
Но вообще задачи можно глянуть тут https://github.com/XaveScor/smartbundle/issues?page=1&q=is%3Aissue+is%3Aopen. Я стараюсь вести все задачи и решения максимально открыто
GitHub
XaveScor/smartbundle
Just Code, No Configs. The Library Bundler That Respects Your Time - XaveScor/smartbundle
v0.12.3
https://github.com/XaveScor/smartbundle/releases/tag/v0.12.3
Решена проблема оочень долгой генерации бандла в некоторых проектах.
Никогда не читайте рекурсивно директории, если там может оказаться node_modules. Теперь эта директория игнорируется и всё работает куда быстрее
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
В этом патче смартбандл явно требует пользователей использовать
Это требовалось де-факто и в предыдущих версиях, но никак не проверялось бандлером.
Проблема в том, что vite и прочие тулы обрабатывают файлы независимо друг от друга и никак не могут понять по
Теперь бандл даже не начнётся, если вы не добавите настроек в tsconfig
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
GitHub
Release v0.12.4 · XaveScor/smartbundle
What's Changed
130: force users to use verbatimModuleSyntax by @XaveScor in #132
More info in #131
Full Changelog: v0.12.3...v0.12.4
130: force users to use verbatimModuleSyntax by @XaveScor in #132
More info in #131
Full Changelog: v0.12.3...v0.12.4