Недавно я перенёс Intlayer (решение для i18n) — монорепозиторий, состоящий из нескольких приложений (Next.js, Vite, React, design-system и т. д.) — с pnpm на Bun.
Кратко (TL;DR): если бы я знал заранее, я бы, вероятно, не делал этого.
Я думал, что это займёт пару часов. В итоге ушло около 20 часов.
Меня привлекло обещание «всё в одном» и впечатляющие показатели производительности.
Я попробовал, я собрал — всё билдилось молниеносно, круто.
Затем я сделал коммит… и столкнулся с первой проблемой.
Husky перестал работать
Оказалось, нужно вручную добавить путь к Bun в файлы commit-msg
и pre-commit
.
Документации на эту тему нет.
Пришлось копаться в GitHub issues, чтобы найти обходное решение.
Дальше — GitHub Actions.
Изменить → запушить → подождать → проверить → исправить → повторить × 15.
Я потратил 3 часа, отлаживая проблему с кешированием.
Наконец всё собирается. Время запускать приложения… или я так думал.
Backend
Проблема 1:
Использование express-rate-limit
ломало все запросы.
Проблема 2:
Моё приложение использует express-intlayer
, который зависит от cls-hooked
для контекстных переменных.
Bun не поддерживает cls-hooked.
Решение: собирать с помощью Bun, запускать на Node.
Website
Проблема 1:
Билд работал локально, но в контейнере с официальным образом Bun процесс зависал, загружал CPU на 100% и падал.
Пришлось откатиться.
Нашёл issue на GitHub от 2023 года, где советовали использовать Node-образ и устанавливать Bun вручную.
Проблема 2:
Компоненты моего design system начали выдавать ошибки “module not found”.
Bun всё ещё плохо справляется с разрешением путей к пакетам.
Мне пришлось заменить все вызовы createRequire
(для совместимости CJS/ESM) и вручную передавать функцию require
в каждую зависимость.
Остальные ошибки опущу.
После многих часов мучений я наконец заставил всё работать.
Итак, каковы результаты по производительности CI/CD?
Процесс | Было | Стало |
---|---|---|
Backend CI/CD | 5 мин | 4:30 |
Server MCP | 4 мин | 3 мин |
Storybook | 8 мин | 6 мин |
Next.js приложение | 13 мин | 11 мин |
Во время выполнения мои приложения на Express и Next.js всё равно работают на Node.
Вывод
Если вы спрашиваете: «Пора ли переходить на Bun?»
Мой ответ:
Он работает, но пока не совсем готов для сложных случаев.
Тем не менее, я верю в его потенциал и с интересом наблюдаю, как он развивается.
А вы сталкивались с подобными проблемами при миграции?