Стандартная библиотека JavaScript, которой у нас никогда не было
Экосистема JavaScript долгое время страдала от отсутствия полноценной стандартной библиотеки. Этот пробел вынуждал разработчиков интегрировать множество микропакетов, что приводило к значительному раздуванию зависимостей проекта и повышению уязвимости цепочки поставок. Такая зависимость от разрозненных сторонних решений стала постоянной архитектурной проблемой.
Bun 1.4, представленный как The Rust Rewrite, напрямую решает эту проблему. Теперь среда выполнения включает в себя основные высокопроизводительные утилиты, разработанные на Rust, чтобы обеспечить базовые функциональные возможности, для которых раньше требовались внешние пакеты. Это устраняет необходимость в более чем 15 распространенных зависимостях для различных типов проектов.
Конкретные примеры замены зависимостей включают:
- Bun.WebView заменяет Playwright и Puppeteer для управления headless-браузером.
- Bun.Image обрабатывает манипуляции с изображениями, устраняя необходимость в таких библиотеках, как Sharp.
- Bun.Markdown интегрирует надежный парсинг markdown.
- Bun.Terminal предлагает встроенный псевдотерминал, исключая зависимость от node-pty.
Этот интегрированный подход знаменует собой серьезный философский сдвиг для экосистемы JavaScript. Он отходит от культуры разрозненных микропакетов в сторону более надежной среды выполнения по принципу «все включено». Bun 1.4 нацелен на консолидацию фундаментальных возможностей, способствуя большей стабильности и снижению накладных расходов проекта.
Убейте Puppeteer и Sharp с помощью нативных API
Bun 1.4 представляет Bun.WebView, встроенный headless-браузер для автоматизации, разработанный для замены таких зависимостей, как Playwright и Puppeteer. На Mac Bun.WebView использует системный WebKit, движок, на котором работает Safari, не требуя дополнительных установок. Для пользователей Windows и Linux он использует существующий экземпляр Chrome или Chromium, способный запускать headless-подпроцесс или подключаться к уже открытому браузеру.
Эта нативная интеграция отправляет нативные события браузера для взаимодействия, делая клики, ввод текста и прокрутку более естественными для веб-страниц. Его API охватывает основные операции, такие как поиск элементов, клики, ввод текста и выполнение JavaScript на странице через evaluate. Хотя Bun.WebView эффективен для легкой автоматизации браузера и парсинга, он пока не полностью заменяет такие инструменты, как Playwright, так как в нем отсутствуют функции вроде средства запуска тестов или средства просмотра трассировки.
Дальнейшим сокращением раздувания зависимостей служит Bun.Image — мощная замена Sharp. Эта нативная библиотека изображений предлагает цепочки операций непосредственно внутри Bun. Разработчики могут эффективно изменять размер, поворачивать, отражать, регулировать яркость и резкость, а также конвертировать форматы изображений. Bun.Image также считывает метаданные, включая ширину, высоту и формат, без необходимости полной декодировки пиксельных данных. Это устраняет необходимость в сложных нативных сборках и решает проблемы развертывания, часто возникающие с внешними библиотеками обработки изображений.
Ваш рабочий процесс разработки теперь встроен
Bun 1.4 представляет встроенный исполнитель скриптов, устраняющий внешние зависимости, такие как concurrently или npm-run-all. Разработчики теперь могут выполнять несколько скриптов из package.json одновременно с помощью --parallel или последовательно с помощью --sequential. Эта функция включает вывод с префиксом имени скрипта, сопоставление имен скриптов по шаблону (glob) и фильтрацию рабочих областей (workspaces). Также предусмотрена опция, позволяющая другим скриптам продолжать работу, даже если один из них завершился с ошибкой.
Для планирования задач Bun.cron заменяет такие пакеты, как node-cron. Он поддерживает два режима: функция, выполняемая в цикле событий для простых задач, и скрипт, регистрирующий нативное cron-задание на уровне ОС. Эти системные задания используют crontab в Linux, launchd на Mac и Планировщик заданий (Task Scheduler) в Windows для надежного и постоянного выполнения. Поддерживается стандартный синтаксис cron, включая именованные дни и вспомогательные функции, такие как daily.
API псевдотерминала Bun.Terminal интегрирован непосредственно в среду выполнения, что устраняет необходимость в node-pty. Это позволяет JavaScript управлять интерактивными приложениями командной строки, такими как Bash, Vim или Htop. Bun.spawn получает опцию terminal, гарантирующую, что подпроцессы получат полноценную среду терминала для цветного вывода, перемещения курсора и интерактивных подсказок. Для получения дополнительной информации об этих и других функциях обратитесь к примечаниям к выпуску Bun 1.4.
Нравится статья? Получайте такие каждое утро на почту.
одно письмо в день · отписка в два клика · без сторонних трекеров
Истинные дивиденды переписывания на Rust
Фундаментальное переписывание на Rust в Bun 1.4 обеспечивает существенный прирост производительности — это истинный результат реархитектуры. Такая переработка приводит к более быстрому запуску и заметно более низкому использованию CPU для всех операций. Примечательно, что бинарный файл Bun стал на 17% меньше, даже с учетом добавления обширного нового функционала, такого как Bun.WebView и Bun.Image.
Дополнительные утилиты еще больше оптимизируют рабочие процессы разработки. Bun.Archive предоставляет быструю нативную реализацию для проверки tar-архивов, позволяя разработчикам читать конкретные файлы, например package.json из архива .tgz, без полной распаковки. Bun также представляет нативную поддержку парсинга и сериализации JSON5 и XML, устраняя необходимость в сторонних библиотеках для этих распространенных форматов данных.
Значительным улучшением удобства использования для управления пакетами является новое глобальное виртуальное хранилище — isolatedLinker. Эта функция экономит значительное количество дискового пространства за счет создания символических ссылок на установленные пакеты в локальные папки node_modules проектов, вместо их дублирования. isolatedLinker также ускоряет последующие команды bun install в разных проектах, повышая общую эффективность разработчика.
Часто задаваемые вопросы
Какое самое большое изменение в Bun 1.4?
«Переписывание на Rust» представляет мощную встроенную стандартную библиотеку, нацеленную на замену более 15 распространенных NPM-зависимостей для таких задач, как автоматизация браузера, обработка изображений и cron-задания, непосредственно внутри среды выполнения.
Заменяет ли Bun 1.4 полностью Playwright или Puppeteer?
Не полностью. Bun.WebView отлично подходит для легкой автоматизации браузера, парсинга данных и UI-скриптов. Однако в настоящее время в нем отсутствуют расширенные функции, имеющиеся в Playwright, такие как специализированный тест-раннер и просмотрщик трассировки (trace viewer).
Какие ключевые зависимости может заменить Bun 1.4?
Bun 1.4 может заменить такие пакеты, как Playwright/Puppeteer (Bun.WebView), Sharp (Bun.Image), Marked (Bun.Markdown), node-cron (Bun.cron), concurrently (параллельные скрипты), а также различные библиотеки для работы с tar и ANSI-строками.
Как работает глобальное виртуальное хранилище Bun 1.4?
Когда включен 'isolatedLinker', bun install извлекает пакеты в единое глобальное хранилище на вашем компьютере. Затем он использует символические ссылки для подключения их к node_modules вашего проекта, что значительно экономит дисковое пространство и ускоряет установку в разных проектах.

