bythe.net
← К ленте
Проект

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 как менеджер пакетов и тест-раннер, оставив рантайм в проде прежним, и переводить остальное по мере уверенности.

Войти, чтобы оценить материал

Комментарии

Войти, чтобы оставить комментарий