Bun: рантайм, бандлер и тест-раннер в одном файле
Bun запускает JavaScript и TypeScript без сборки, ставит пакеты быстрее npm и приносит с собой встроенные SQLite, шелл и сервер. Что из этого реально полезно.
Не ещё один Node
Bun часто описывают как «быстрый Node.js», и это описание мешает понять, что это на самом деле. Node — это рантайм. Bun — рантайм плюс менеджер пакетов плюс бандлер плюс тест-раннер, и всё это один бинарник, написанный на Zig поверх движка JavaScriptCore из WebKit.
Цель проекта — убрать из типичного JS-проекта десяток инструментов, которые нужно ставить, настраивать и синхронизировать между собой.
Что заменяет
| Задача | Раньше | В Bun |
|---|---|---|
| Запуск TS | ts-node, tsx, сборка | bun run file.ts |
| Установка пакетов | npm, pnpm, yarn | bun install |
| Сборка | esbuild, webpack, vite | bun build |
| Тесты | jest, vitest | bun test |
| .env | dotenv | читается автоматически |
TypeScript и JSX работают без настройки: Bun транспилирует на лету и не проверяет типы, за проверкой по-прежнему идут к tsc.
Встроенные API
Кроме стандартного набора веб-API (fetch, WebSocket, Request, Response) в Bun есть свои модули:
bun:sqlite— синхронный драйвер SQLite без нативных зависимостей;Bun.serve— HTTP-сервер с WebSocket и маршрутизацией;Bun.$— шелл-скрипты прямо в JS, кроссплатформенно;Bun.fileиBun.write— быстрая работа с файлами.
import { Database } from "bun:sqlite";
const db = new Database("app.db");
const rows = db.query("select * from posts limit 10").all();
Bun.serve({
port: 3000,
fetch: () => Response.json(rows),
});
Совместимость с Node
Bun реализует большую часть API Node.js: fs, path, http, crypto, worker_threads. Большинство пакетов из npm работает без изменений. Но «большинство» — не «все»: нативные модули и редкие внутренности Node могут вести себя иначе, и перед переездом стоит прогнать тесты.
Где Bun действительно выигрывает
- Установка зависимостей. Глобальный кеш и параллельная распаковка делают
bun installзаметно быстрее npm, особенно на CI. - Скрипты и утилиты. Написать инструмент на TypeScript и запустить без сборки — это то, чего в Node не хватало годами.
- Холодный старт. Процесс поднимается быстрее, что важно для CLI и serverless.
Где осторожнее
Bun молод и двигается быстро. Крупные фреймворки его поддерживают, но в проде большинство пока держит Node: там предсказуемее и больше накопленного опыта. Хороший способ начать — использовать Bun как менеджер пакетов и тест-раннер, оставив рантайм в проде прежним, и переводить остальное по мере уверенности.
Войти, чтобы оценить материал
Комментарии
Войти, чтобы оставить комментарий