🧰 Что это
Bun Runtime — это быстрый, всё-в-одном инструмент для разработки на JavaScript и TypeScript. Он заменяет сразу несколько утилит: рантайм (как Node.js), менеджер пакетов (npm/yarn), сборщик (webpack/rollup) и тестовый раннер (Jest/Vitest). Bun написан на Zig и использует движок JavaScriptCore, что даёт значительный прирост скорости при установке зависимостей, запуске скриптов и выполнении тестов. Навык помогает разобраться, когда выбирать Bun вместо Node, как мигрировать существующий проект и как настроить Bun на Vercel.
⚙️ Как работает
🏃 Runtime
Bun — это drop-in замена Node.js для большинства сценариев. Он поддерживает встроенные модули Node (fs, path, http и др.) и работает с TypeScript «из коробки» — не нужна отдельная компиляция. Запустить файл можно командами bun run script.ts или просто bun script.ts. Для скриптов из package.json используйте bun run dev, bun run build и т.д.
📦 Package manager
Команда bun install устанавливает зависимости в разы быстрее npm/yarn. Lock-файл по умолчанию — текстовый bun.lock (в новых версиях Bun), в старых — бинарный bun.lockb. Рекомендуется коммитить lock-файл в репозиторий для воспроизводимых установок. Для CI/CD используйте bun install --frozen-lockfile.
🔨 Bundler
Встроенный сборщик и транспилятор позволяет собирать приложения и библиотеки без дополнительных инструментов. Пример сборки:
bun build ./src/index.ts --outdir=dist
🧪 Test runner
bun test — встроенный тестовый раннер с API, похожим на Jest. Поддерживает watch-режим (bun test --watch), моки, снапшоты. Пример теста:
bun test
// test/example.test.ts
import { expect, test } from "bun:test";
test("add", () => {
expect(1 + 2).toBe(3);
});
🔄 Миграция с Node
Основные шаги:
- Заменить
node script.js на bun run script.js или bun script.js.
- Вместо
npm install выполнять bun install.
- Для однократного запуска утилит (аналог
npx) — bun x package``.
- Node-совместимые модули работают, но для максимальной производительности лучше использовать нативные Bun API, например
Bun.file() вместо fs.readFileSync.
☁️ Vercel
В настройках проекта на Vercel нужно указать рантайм Bun. Команды для сборки и установки:
bun install --frozen-lockfile
bun run build
Или напрямую bun build ./src/index.ts --outdir=dist.
🎯 Когда использовать
Выбирайте Bun, если:
- Начинаете новый проект на JS/TS и хотите единый инструментарий.
- Скорость установки зависимостей и запуска скриптов критична (CI/CD, локальная разработка).
- Планируете деплой на Vercel с поддержкой Bun.
- Нужен быстрый тестовый раннер с привычным Jest-подобным API.
Оставайтесь на Node, если:
- Проект использует устаревшие зависимости, которые могут быть несовместимы с Bun.
- Требуется максимальная совместимость с экосистемой npm (некоторые пакеты всё ещё имеют баги под Bun).
- Используете инструменты, завязанные на Node (например, некоторые плагины Webpack).
⚠️ Важно знать
- Lock-файл (
bun.lock или bun.lockb) обязательно коммитить — это гарантирует воспроизводимость установок.
- Bun активно развивается, поэтому регулярно обновляйте его и зависимости.
- Для работы с переменными окружения используйте флаг
--env-file: bun run --env-file=.env dev.
- Встроенные Bun API (
Bun.serve, Bun.file, Bun.write) часто быстрее аналогов из Node, но не всегда полностью взаимозаменяемы — проверяйте документацию.
Комментарии
Комментариев пока нет. Будьте первым.