🧰 Что это
Bun Runtime & Toolkit — это универсальная замена Node.js, которая объединяет в себе четыре инструмента: быстрый JavaScript/TypeScript-рантайм, пакетный менеджер (bun install), сборщик (bun build) и тест-раннер (bun test). Написан на Zig, использует JavaScriptCore (движок Safari) вместо V8, что даёт заметный прирост скорости при установке зависимостей и запуске скриптов. Skill помогает разобраться, когда выбирать Bun вместо Node, как мигрировать существующий проект и как настроить Bun на Vercel.
⚙️ Как работает
🏃 Рантайм
Bun запускает .js и .ts файлы напрямую, без дополнительной конфигурации TypeScript. Он поддерживает большинство Node.js API (fs, path, http), но также предоставляет собственные, более производительные аналоги — например, Bun.file() для работы с файлами и Bun.serve() для создания HTTP-сервера.
📦 Пакетный менеджер
Команда bun install скачивает зависимости в разы быстрее npm install или yarn. Lock-файл по умолчанию — bun.lock (текстовый формат), в старых версиях использовался бинарный bun.lockb. Оба файла рекомендуется коммитить в репозиторий для воспроизводимых установок.
🧪 Тест-раннер
bun test — встроенный аналог Jest с похожим API. Тесты пишутся с импортом из bun:test:
bun test
bun test --watch
// test/example.test.ts
import { expect, test } from "bun:test";
test("add", () => {
expect(1 + 2).toBe(3);
});
🏗️ Сборщик
bun build может собирать как приложения, так и библиотеки. Поддерживает TypeScript, JSX, CSS-модули. Пример для продакшена:
bun build ./src/index.ts --outdir=dist
🔄 Миграция с Node
Основные замены команд:
node script.js → bun run script.js или просто bun script.js
npm install → bun install
npx package → `bun x `package
npm run script → `bun run `script
Большинство npm-пакетов работают без изменений. Если есть специфичные для Node API, Bun их эмулирует, но для максимальной производительности стоит использовать нативные Bun-функции там, где это возможно.
☁️ Vercel
В проекте на Vercel нужно в настройках указать Bun как рантайм. Команды для vercel.json или панели управления:
- Build:
bun run build или bun build ./src/index.ts --outdir=dist
- Install:
bun install --frozen-lockfile (для повторяемых сборок)
🎯 Когда использовать
- Новые проекты — если не требуется максимальная совместимость с экосистемой Node, Bun даёт значительный прирост скорости разработки.
- Скрипты и утилиты — быстрый запуск, встроенная поддержка TypeScript,
.env-файлы через флаг --env-file.
- Vercel-деплои — официальная поддержка Bun как рантайма.
- Моноинструментальные проекты — когда хочется один инструмент для установки, сборки, тестов и запуска.
Когда лучше остаться на Node:
- Если проект использует инструменты, которые предполагают Node (например, некоторые плагины Webpack, старые версии ESLint).
- Если есть зависимость с известными проблемами под Bun (проверяйте совместимость на
bun.sh/guides/ecosystem).
- Для максимальной совместимости с экосистемой — Node остаётся стандартом де-факто.
💡 Важно знать
- Lock-файл обязателен — коммитьте
bun.lock (или bun.lockb) для воспроизводимости.
- TypeScript работает нативно — не нужен
ts-node или tsc для разработки.
- Bun развивается быстро — следите за changelog, так как API может меняться.
- Не все npm-пакеты совместимы — перед миграцией проверьте критические зависимости.
- Переменные окружения можно передавать как
FOO=bar bun run script.ts или через файл: bun run --env-file=.env dev.
Комментарии
Комментариев пока нет. Будьте первым.