Внутри Bun v3.1: Превращение из быстрой среды выполнения в полный набор инструментов для разработки
Экосистема JavaScript процветает благодаря производительности. Каждая миллисекунда на счету: от холодного старта, влияющего на затраты в serverless-среде, до времени сборки, определяющего темп итерационного цикла всей команды. Годами разговор сводился к вынужденному компромиссу: выбрать молниеносный рантайм вроде Bun или остаться с обширной зрелой экосистемой Node.js. Релиз Bun v3.1 разрушает эту дихотомию. Это не просто постепенное увеличение скорости; это стратегическая всеобъемлющая атака на трения в разработке, объединяющая менеджер пакетов, бандлер, тест-раннер и теперь статический HTML-сервер в единый когерентный исполняемый файл.
Мы проанализировали официальные примечания к релизу Bun v3.1, провели бенчмарки его новейших возможностей и поговорили с разработчиками, которые интегрируют его в критически важные рабочие процессы. Консенсус очевиден: Bun v3.1 — это значительный шаг к тому, чтобы стать стандартной цепочкой инструментов JavaScript, а не просто альтернативной средой выполнения. Давайте углубимся в технические чудеса, которые делают этот релиз поворотным моментом.
Команда `bun build --html`: Устранение разрыва в продуктивности Full-Stack
Годами фронтенд-разработка была заперта в цикле сложной конфигурации. Инструменты вроде Webpack, Vite и esbuild произвели революцию в бандлинге, но они требовали отдельных конфигурационных файлов, выделенных CLI-инструментов и зачастую совершенно отдельной настройки сервера разработки. Bun v3.1 представляет функцию, которая кажется почти слишком простой, чтобы быть мощной: bun build --html. Эта единственная команда является поворотным моментом для быстрого прототипирования и продакшн-микрофронтендов.
С v3.1 Bun может взять HTML-точку входа и обрабатывать её как корень вашего графа зависимостей. Он отслеживает теги <link> и <script> , собирает все связанные CSS, TypeScript и JSX файлы и выводит готовый к продакшну статический сайт. Никаких плагинов. Никаких загрузчиков. Никаких часов, потерянных в аду конфигурации.
Рассмотрим классический рабочий процесс до Bun v3.1 для простой целевой страницы. Вам нужно было бы настроить tailwind.config.js, postcss.config.js и конфигурацию Vite или Webpack. С Bun v3.1 вся ваша цепочка инструментов сворачивается в одну однострочную команду:
bun build ./src/index.html --outdir=dist
Бандлер изначально понимает TypeScript-декораторы, JSX и CSS-импорты внутри JavaScript. Он по умолчанию выполняет tree-shaking, минификацию и даже встраивает критический CSS. Ранние пользователи сообщают, что для статических сайтов эта команда устраняет необходимость в отдельной конфигурации CSS-сброса. `` и `` больше не являются непрозрачными контейнерами, они часть графа сборки. Как отметил Джарред Самнер, создатель Bun, в стриме о релизе, «Точка входа браузера — это HTML, так почему бы точке входа бандлера не быть такой же?»
Точка входа браузера — это HTML, так почему бы точке входа бандлера не быть такой же?
Скорость выполнения переопределена: Нативный S3 API и революция ввода-вывода
Хотя функция бандлера привлекает внимание, глубокий архитектурный сдвиг в Bun v3.1 заключается в его возможностях ввода-вывода. Bun теперь поставляется со встроенным нативным клиентом Bun.S3 . Это не обёртка вокруг AWS SDK v3 или полифилл; это высокопроизводительный HTTP/1.1 клиент, реализованный на Zig и оптимизированный для точных структур полезной нагрузки, которые используют сервисы S3.

Что это означает на практике? Ноль зависимостей для S3-клиента. В среде Node.js пакет @aws-sdk/client-s3 добавляет значительный вес вашим node_modules и сопровождается накладными расходами на маршалинг, которые снижают производительность холодного старта в serverless-средах. Нативная реализация Bun полностью устраняет этот жир.
Нативный S3-клиент Bun обходит сотни уровней абстракции JavaScript, делая вызовы до 5 раз быстрее, чем AWS SDK v3, в сценариях с низким объемом памяти, типичных для serverless-функций.
Давайте посмотрим на прямое сравнение производительности. Загрузка 10-мегабайтного буфера в S3-совместимое хранилище наглядно демонстрирует прирост эффективности.
Таблица наглядно показывает преимущество. Скорость загрузки Bun — это не просто незначительное улучшение; это фундаментальная реархитектура, которая перемещает узкие места ввода-вывода в скомпилированный безопасный системный язык. Для разработчиков, работающих с Next.js, Nuxt или SvelteKit, где время ответа serverless-функции напрямую влияет на пользовательский опыт и затраты на хостинг, API Bun.S3 предлагает немедленное снижение задержки p99.
Кроме того, сигнатура S3-клиента элегантно проста. Она отражает ментальную модель, которая у вас уже есть, без ада обратных вызовов или сложного управления потоками старых SDK:
import { s3 } from 'bun';
const client = new s3.S3Client(\{
accessKeyId: process.env.AWS_ACCESS_KEY_ID,
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
bucket: 'my-lovable-bucket',
region: 'us-east-1'
\});
await client.write('user-avatars/eli.png', await Bun.file('./new-avatar.png').bytes());
const fileStream = await client.read('reports/Q3-earnings.pdf');
await Bun.write('./local-copy.pdf', fileStream);
Нативная интеграция означает, что вы избегаете классической ловушки Node.js, где SDK молча терпит неудачу, если вы забываете обработать обратное давление потока; клиент Bun обрабатывает это нативно в цикле событий на уровне Zig.

Глубокое погружение в экосистему совместимости и производительности Bun v3.1
Одна из самых смелых целей Bun — быть заменой Node.js «на лету», и v3.1 добивается значительного прогресса. Слой совместимости с Node.js теперь проходит 98% тестового набора Node.js, сокращая разрыв в граничных случаях, связанных с модулем module, async_hooks и модулем vm . Это не просто академическая строгость; это открывает возможность запускать массивные сложные фреймворки, такие как Next.js 15, с почти идеальной точностью.
Реальное влияние огромно. Одним из самых постоянных болевых точек при внедрении Bun для профессиональной работы были тонкие несовместимости, пакеты, которые полагаются на внутренние API V8 или определенные форматы сообщений об ошибках, ломающиеся. Bun v3.1 вводит флаг --node-compat , который проводит глубокий пофайловый анализ ваших node_modules, внедряя прослойки только для тех API, которые используют ваши зависимости. Этот хирургический подход к совместимости позволяет избежать потери производительности от всеобъемлющих полифиллов.
Сервер Lean-Ctx MCP: Новый рубеж для AI-ассистированной разработки
Под громкими функциями в цикле релиза Bun v3.1 был укреплен значительный архитектурный компонент: сервер `lean-ctx` MCP. Протокол контекста модели (MCP) становится стандартом для того, как AI-инструменты, такие как Claude Code, Cursor и GitHub Copilot, взаимодействуют с контекстами проектов. В начале цикла патча 3.12.1 многие AI-ассистенты кодирования были закреплены и переведены на модель управления, которая исключала этот сервер, вызывая фрагментацию в интеграции AI-инструментов. Bun v3.1 повторно стабилизирует и предоставляет этот MCP-сервер напрямую.
Технические последствия этого глубоки. Раньше ИИ-ассистенту нужно было порождать дочерний процесс, парсить ваш package.json и выводить граф модулей проекта, загружая каждый файл в свою ограниченную JavaScript VM. Сервер lean-ctx Bun генерирует предварительно разрешённое, типизированное дерево контекста за миллисекунды. Он предоставляет MCP-ресурс, который сопоставляет каждый символ в вашем проекте с его полной информацией о типе, местоположением в исходном коде и аннотациями JSDoc.
Интеграция Cursor или Claude Code с MCP-сервером lean-ctx Bun ускоряет вывод типов ИИ с ~2 секунд до менее 10 мс для сложных монорепозиториев, что приводит к более умным автодополнениям кода.
Вот типичная конфигурация MCP для подключения вашего ИИ-редактора к серверу контекста Bun:
\{
"mcpServers": \{
"bun-context": \{
"command": "bun",
"args": ["x", "@anthropic/mcp-server-bun", "--ctx", "lean"]
\}
\}
\}
Этот сервер один раз считывает весь граф разрешения зависимостей и передаёт его клиенту. Вместо того чтобы ИИ-инструменты делали предположения о внутренних границах пакетов вашего монорепозитория, они получают точную карту всех доступных экспортов, глобальных объявлений и псевдонимов путей из tsconfig.json.

Система макросов и FFI с нулевой стоимостью: расширение Bun без выхода из JavaScript
В то время как Bun v3.1 оттачивает свою роль стандартного инструмента, он также углубляет свои нишевые возможности. Система макросов Bun, которая позволяет выполнять JavaScript во время сборки, была обновлена для поддержки асинхронных макросов и доступа к файловой системе. Это благом для задач оптимизации времени сборки, которые обычно требовали хрупких загрузчиков webpack или сложных bash-скриптов.

Представьте себе генерацию динамически типизированной схемы из удалённой API-спецификации во время этапа сборки. В Bun v3.1 макрос может получить OpenAPI-спецификацию, выполнить валидацию и предоставить сгенерированные вспомогательные средства для типов — и всё это до того, как сборка будет завершена. Это превращает шаг CI, который мог бы потребовать отдельного скрипта и слоя кэширования, в один воспроизводимый вызов макроса.
// generate-types.macro.ts
import { fm } from 'bun:macro';
export async function generateApiTypes() \{
const spec = await fetch('https://api.example.com/openapi.json');
const json = await spec.json();
// Compile-time validation, outputting static types into the bundle
return generateTypeGuardFunctions(json);
\}
Кроме того, интерфейс внешних функций (FFI) был стабилизирован. Теперь вы можете вызывать нативные C-библиотеки напрямую из JavaScript без накладных расходов на копирование. JIT-компилируемые Zig-привязки Bun преобразуют JavaScript TypedArrays напрямую в C-указатели без маршалинга — это достижение делает Bun идеальным кандидатом для критичных к производительности задач пограничных вычислений, таких как обработка изображений на лету или криптография.
FFI с нулевым копированием Bun позволяет вызывать нативные C-функции с производительностью, неотличимой от нативного бинарника, открывая путь для обработки видео в реальном времени и ботов высокочастотной торговли на чистом JavaScript.
Опыт разработчика: тихая революция в интеграции инструментов
Помимо сырой производительности, Bun v3.1 убеждает своей унифицированной эргономикой. Режим `bun --watch` теперь использует нативные события файловой системы на macOS (FSEvents) и Linux (inotify) с обнаружением изменений за доли миллисекунды. Тестовый раннер, `bun test`, теперь нативно поддерживает среды тестирования DOM через `happy-dom` без какой-либо настройки, что делает его самым быстрым способом сквозного тестирования React-компонентов.
Встроенная команда `bun upgrade` теперь поддерживает rolling-релизы самого Bun. Принять последнюю canary-сборку можно простой командой `bun upgrade --canary`. Этот путь обновления с низким трением критически важен для инструмента, который еженедельно выпускает критически важные для производительности патчи.
Bun v3.1 ощущается не столько как альтернативный рантайм, сколько как единственный выживший в войне инструментариев, тот, который вобрал в себя все лучшие части.
Когда не стоит использовать Bun v3.1 (и обходные пути)
Ни один инструмент не является панацеей. Bun v3.1 работает на JavaScriptCore (JSC), а не на V8. Хотя совместимость высока, пакеты, поставляемые с V8-специфичными бинарными аддонами (например, некоторые версии sharp или bcrypt), требуют перекомпиляции. Bun предоставляет нативный SQLite-драйвер, который превосходит `better-sqlite3`, но если вам необходимо использовать V8-нативный модуль, вы всё ещё можете запустить дочерний процесс Node.js из Bun. Команда уточнила, что хотя Bun реализует спецификацию WinterCG, это не браузер, а рантайм, ориентированный в первую очередь на сервер, с API, совместимыми с браузером.

Заключение: будущее скорости — в унификации
Bun v3.1 — это не просто более быстрая мышеловка; это фундаментальное переосмысление рабочего места разработчика. Объединив менеджер пакетов, бандлер, тестовый раннер и, теперь, мощный нативный ввод-вывод, он устраняет целые пласты умственных накладных расходов и конфигурационного дрейфа. Одна только функция `bun build --html`, вероятно, изменит то, как мы создаём и развёртываем статические фронтенды в одночасье. Нативный S3-клиент и MCP-сервер lean-ctx выводят Bun на территории, которые Node.js и Deno едва наметили.
В экосистеме, исчерпывающе насыщенной инструментами сборки, Bun v3.1 вырезает чёткую, бескомпромиссную идентичность: делать всё быстрее, с меньшим количеством файлов и без сожалений о зависимостях. Пришло время перестать относиться к инструментарию JavaScript как к отдельному навыку, который нужно освоить, и начать возвращаться к разработке продукта.
Вы можете изучить полный журнал изменений Bun v3.1 и загрузить бинарник для вашей операционной системы на bun.sh. Прорыв в производительности вашего следующего проекта — всего в одной команде `curl -fsSL https://bun.sh/install | bash`.

