🚀 Что это
Навык Bun Runtime Optimization — это гайд по использованию Bun как альтернативы Node.js в разработке и деплое. Bun — это не просто рантайм, а полный инструментарий: менеджер пакетов (bun install), бандлер (вместо Webpack/Rollup), транспайлер TypeScript и тест-раннер с API, совместимым с Jest. Основная цель — ускорить разработку и упростить тулчейн, объединив несколько инструментов в одном бинарнике.
Навык помогает ответить на вопросы: когда стоит переходить на Bun, а когда оставаться на Node, как перенести проект, как настроить Bun для Vercel и как эффективно его использовать в повседневной работе.
⚙️ Как работает
🏃 Рантайм
Bun построен на движке JavaScriptCore (а не V8, как Node) и написан на Zig. Это даёт более быстрый старт и меньшее потребление памяти во многих сценариях. Он поддерживает большинство Node.js API (fs, path, http и т.д.) — поэтому существующий код часто работает без изменений. Однако Bun предлагает собственные, более производительные API (например, Bun.file, Bun.serve, Bun.write).
📦 Менеджер пакетов
bun install работает значительно быстрее npm install и yarn, особенно при первом запуске (кэширование агрессивное). Файл блокировки — bun.lock (текстовый в версиях >=1.0) или bun.lockb (бинарный в ранних версиях). Рекомендуется коммитить bun.lock в репозиторий для воспроизводимых установок.
🔨 Бандлер и транспайлер
Bun умеет собирать проекты без дополнительных настроек: bun build ./src/index.ts --outdir=dist. TypeScript и JSX поддерживаются из коробки, без установки tsc или webpack. Это удобно для небольших скриптов, библиотек и серверных приложений.
🧪 Тест-раннер
bun test имеет API, похожий на Jest, но работает быстрее и использует тот же кэш, что и сам Bun. Пример теста:
bun test
// test/example.test.ts
import { expect, test } from "bun:test";
test("add", () => {
expect(1 + 2).toBe(3);
});
🔄 Миграция с Node.js
Основные правила:
- Вместо
node script.js — bun run script.js или просто bun script.js.
- Вместо
npx cowsay — bun x cowsay.
- Вместо
npm install — bun install.
- Скрипты из
package.json запускаются командой bun run script-name``.
Node-зависимости (Express, Prisma и т.д.) в большинстве работают, но есть редкие проблемы с нативными модулями, завязанными на Node C++ API. В таких случаях лучше остаться на Node.
🌐 Деплой на Vercel
Vercel поддерживает Bun как рантайм для Serverless-функций и Edge-функций. В настройках проекта нужно выбрать Bun (а не Node.js). Команда сборки: bun run build или bun build ./src/index.ts --outdir=dist. Для установки зависимостей в CI/Vercel используйте:
bun install --frozen-lockfile
Это гарантирует фиксацию версий из bun.lock и предотвратит неожиданные изменения.
✅ Когда использовать
Навык пригодится в следующих сценариях:
- 🆕 Запуск нового проекта на JavaScript/TypeScript: используйте Bun с нуля, чтобы получить единый тулчейн.
- 🔄 Миграция существующего Node-проекта: если нет критичных нативных зависимостей, Bun может дать прирост скорости.
- 🚀 Оптимизация скорости разработки: быстрый
bun install, быстрый запуск тестов, нативный TypeScript.
- ☁️ Деплой на Vercel: если вы хотите использовать Bun runtime для меньшего времени холодного старта и простоты конфигурации.
- 🧪 Скрипты и одноразовые задачи:
bun run быстрее node run, а bun x заменяет npx.
⚠️ Важно знать
- Совместимость: Bun не на 100% совместим с Node.js. Некоторые глобальные объекты (
process.nextTick), нативные модули (bcrypt, sharp) и специфика поведения (таймеры, Buffer) могут отличаться. Проверяйте зависимости на официальной странице совместимости Bun.
- Стабильность: Всё ещё активно развивается (версии 1.x). API Bun (
Bun.serve, Bun.file) стабильны, но могут меняться незначительно. Рекомендуется следить за changelog.
- Lockfile: До версии 1.0 использовался бинарный
bun.lockb. Если вы находитесь на старой версии и переходите на новую, lockfile будет перегенерирован. Коммитьте его, чтобы избежать сюрпризов в CI.
- Переменные окружения: Можно передавать как обычно (
FOO=bar bun run script.ts) или через файл: bun run --env-file=.env dev.
- Для продакшена: Bun сам по себе — рантайм, поэтому на сервере Vercel, Railway, Fly.io и т.д. вы указываете его как рантайм. На собственном сервере нужно установить бинарник Bun.
Подытожим: навык даёт чёткую дорожную карту: как начать, на что обратить внимание при миграции, как настроить CI/CD и тесты. Это инструкция для разработчика, который хочет получить от Bun максимум скорости и удобства без лишних танцев с бубном.
Комментарии
Комментариев пока нет. Будьте первым.