Недавно я перенёс 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?»
Мой ответ:

Он работает, но пока не совсем готов для сложных случаев.

Тем не менее, я верю в его потенциал и с интересом наблюдаю, как он развивается.

А вы сталкивались с подобными проблемами при миграции?