Bun 1.4 только что удалил 15 ваших зависимостей

BBetter Stack
컴퓨터/소프트웨어AI/미래기술

스크립트

00:00:00Вышло самое крупное и спорное обновление BUN — версия 1.4, переписанная на Rust.
00:00:04Я уже делал видео о драме вокруг этого переписывания, так что сосредоточимся на новинках,
00:00:07потому что многое мне действительно нравится, особенно стандартная библиотека.
00:00:11Теперь здесь есть встроенный headless-браузер, библиотека изображений, псевдотерминал, разметка Markdown,
00:00:15задачи cron, таблицы и многое другое, что заменяет 15 сторонних зависимостей.
00:00:19За последние годы одной из главных жалоб в мире JavaScript было отсутствие стандартной
00:00:23библиотеки, и BUN это исправляет, что весьма кстати на фоне еженедельных атак на цепочки поставок.
00:00:30Во-первых, мы можем удалить Playwright и Puppeteer и использовать вместо них BUN WebView.
00:00:37С помощью этого кода я могу управлять headless-браузером, найти кнопку подписки и нажать её,
00:00:41хотя запустить это на вашем компьютере я пока не могу, так что вам придется подписаться самим.
00:00:44Все методы ввода, такие как клик, ввод текста, нажатие клавиш и прокрутка, генерируют нативные события браузера,
00:00:48поэтому страница будет думать, что вы реальный пользователь. На Mac используется системный WebKit,
00:00:52то есть движок Safari, так что ничего дополнительно устанавливать не нужно. Но если вам нужен экземпляр Chrome,
00:00:56вы можете установить параметр backend в значение Chrome, и тогда будет использоваться установленный Chrome или Chromium,
00:01:01что и требуется делать на Windows или Linux. Это может запускать фоновый подпроцесс Chrome
00:01:04или подключаться к уже запущенному экземпляру. Используя этот код,
00:01:09я могу управлять открытым Chrome на своем Mac прямо из BUN. Кроме того,
00:01:13вы также можете использовать evaluate для выполнения JavaScript на странице и получать результаты
00:01:17в виде нативных значений JS. А если для нужной функции еще нет API, вы можете обратиться
00:01:21к низкоуровневым командам CDP. Думаю, это отлично подойдет для простейшей автоматизации браузера.
00:01:25Хотя я не думаю, что это полностью заменяет Playwright — здесь нет тест-раннера или просмотрщика трасс,
00:01:29но для парсинга или скриптов взаимодействия с интерфейсом вариант неплохой.
00:01:32Далее давайте удалим Sharp и воспользуемся BUN.image. Это полноценная библиотека изображений,
00:01:37позволяющая взять файл, вызвать для него .image, а затем объединять операции изменения размера, поворота,
00:01:42отражения по горизонтали и вертикали, настройки яркости, резкости и конвертации в различные форматы.
00:01:46Она также позволяет читать метаданные, такие как ширина, высота и формат, без декодирования пикселей.
00:01:50Еще одна крутая функция, которая мне очень нравится — возможность создания изображения-заглушки.
00:01:54Это версия низкого качества, которую можно встроить в HTML до загрузки основного изображения.
00:01:59BUN.image — одна из тех функций, использовать которые я жду больше всего, так как у меня раньше
00:02:04бывали проблемы с деплоем и сборкой из-за Sharp. Теперь с BUN об этом можно не беспокоиться.
00:02:08Также больше не нужно думать о Marked, ведь теперь для разбора Markdown можно просто использовать
00:02:12BUN.markdown. Здесь доступно всего три API.
00:02:16BUN.markdown.html преобразует Markdown в HTML-строку. BUN.markdown.render рендерит Markdown с
00:02:22пользовательскими обратными вызовами для каждого элемента. Это дает гибкость при выводе HTML с кастомными классами,
00:02:27выводом в ANSI-терминал или в любом другом строковом формате. BUN.markdown.react рендерит Markdown в React.jsx,
00:02:33позволяя передавать любой желаемый компонент для каждого элемента, получая отлично стилизованный Markdown.
00:02:37Есть также множество параметров, которыми можно управлять для настройки возможностей Markdown.
00:02:41Вы можете включить таблицы в стиле GitHub, автоссылки, ID заголовков,
00:02:45и вики-ссылки. Правда, разработчики предупреждают, что вывод HTML не очищается,
00:02:50поэтому чистый HTML, атрибуты событий, JavaScript проходят насквозь. Так что если вы рендерите
00:02:54написанный пользователями Markdown, безопасность остается вашей заботой. Несмотря на это,
00:02:59в наши дни генерируется столько Markdown, что это отличное дополнением. Двигаемся дальше,
00:03:03теперь вы можете удалить Node.pty. BUN.terminal предоставляет встроенный псевдотерминал, позволяя запускать
00:03:08Bash, Vim или HTOP прямо из JavaScript. Кто пытался встроить терминал в приложение Electron,
00:03:12тот знает эту боль. По сути, это дополнение к BUN.spawn. Вы передаете параметр terminal, и он
00:03:17создает подпроцесс с привязанным псевдотерминалом. Подпроцесс видит реальный терминал, что обеспечивает
00:03:22цветной вывод, перемещение курсора и интерактивные подсказки. Получив терминал, вы можете
00:03:26записывать в него данные, менять размер, закрывать и делать многое другое. Вы также можете
00:03:31создать собственный терминал для повторного использования между подпроцессами. Я начинаю замечать
00:03:35тенденцию во всех этих функциях: кажется, всё это мог бы использовать Claude Code,
00:03:39поэтому хотелось бы, чтобы они открыли исходный код. Следующая зависимость, от которой мы избавляемся —
00:03:43Node.cron, поскольку теперь можно использовать BUN.cron. Если передать сюда функцию,
00:03:47она будет выполняться в цикле событий без участия системного cron. А если передать скрипт,
00:03:51он зарегистрирует задачу cron на уровне ОС (crontab в Linux, launchd в macOS
00:03:56и планировщик задач в Windows). Вы можете использовать стандартный синтаксис cron с днями недели и помощниками вроде
00:04:01daily. Также поддерживается разбор этого синтаксиса, возвращающий следующую подходящую дату
00:04:05в местном часовом поясе системы. Кстати, по умолчанию все задачи запускаются в локальном времени,
00:04:11но есть явные параметры для его изменения, так что вы всегда будете уверены во времени запуска.
00:04:15Далее на очереди совет удалить concurrently или npm run all, ведь в BUN появился собственный
00:04:20параметр параллельного запуска. Этот флаг позволяет запускать несколько скриптов из package.json одновременно,
00:04:24а вывод аккуратно предваряется именем скрипта. Также поддерживается сопоставление по шаблонам glob
00:04:28для имен скриптов, фильтрация пакетов для выполнения команд в рабочем пространстве
00:04:32и опция продолжения работы остальных скриптов при ошибке в одном из них. Кроме того,
00:04:37скрипты необязательно запускать параллельно — можно использовать последовательный режим с тем же префиксом вывода и фильтрацией.
00:04:41Пожалуй, это та функция, которую я буду использовать чаще всего. Следующий кандидат на удаление — библиотеки тар-архивов.
00:04:45BUN.archive — это быстрая нативная реализация tar и gzip. Создание архива задается простым объектом,
00:04:50где ключи — пути, а значения — содержимое, которым может быть строка, blob, Uint8Array или массив буфера.
00:04:55Для сжатия можно использовать параметр compress, установив его в gzip со степенью сжатия от 1 до 12.
00:05:00Разумеется, архивы можно извлекать, используя шаблоны glob для распаковки только нужных файлов.
00:05:05И мне очень нравится функция чтения архива без его извлечения.
00:05:10Этот код может загрузить lodash из реестра npm и прочитать его package.json, не распаковывая ни единого файла.
00:05:14На данный момент мы избавились примерно от 7 пакетов npm, но впереди еще кое-что.
00:05:19Правда, эти функции мельче, так что мы разберем их быстрее. Во-первых, BUN.serve теперь умеет отдавать статические файлы,
00:05:24избавляя от необходимости использовать serve-static, что отлично подходит для папки public вашего сайта.
00:05:28Во-вторых, в BUN добавлена поддержка JSON5 и XML, так что их пакеты больше не нужны.
00:05:33Вы можете импортировать, парсить и сериализовать оба формата прямо в BUN.
00:05:38Последние три функции — помощники для терминала: BUN.sliceAnsi, BUN.wrapAnsi
00:05:43и BUN.stringWidth, которые обеспечивают обрезку, перенос и измерение с учетом колонок терминала,
00:05:47заменяя такие пакеты, как slice-ansi, cli-truncate, wrap-ansi и string-width.
00:05:52В целом, ушло около 15 пакетов, и я осветил лишь примерно половину этого релиза.
00:05:56Краткая суть большей части этого поста: многое стало работать быстрее, снизилось использование CPU, ускорен запуск,
00:06:01и несмотря на все эти функции, бинарный файл стал меньше на 17%. Ах да, он написан на Rust.
00:06:06Еще одна бонусная функция, о которой стоит упомянуть — в BUN.install появилось глобальное виртуальное хранилище.
00:06:10Если включить изолированный линковщик, пакеты распаковываются на машине один раз и связываются символьными ссылками
00:06:14с вашими node_modules, вместо того чтобы копироваться в каждый проект по отдельности.
00:06:19Это должно ускорить работу и сэкономить место, если у вас масса проектов. Что вы теперь думаете о BUN?
00:06:23Пользуетесь ли вы им? Будете ли применять какие-то из этих функций? Напишите в комментариях ниже,
00:06:27подождите, подпишитесь, и, как всегда, увидимся в следующем видео.
00:06:36Увидимся в следующий раз.

핵심 요약

Выход BUN 1.4 на Rust приносит встроенную поддержку браузера, обработки изображений, терминала и архивов, позволяя удалить 15 внешних пакетов npm.

하이라이트

  • Версия BUN 1.4 написана на Rust и заменяет 15 сторонних зависимостей встроенными возможностями стандартной библиотеки.

  • Новый инструмент BUN.WebView заменяет Playwright и Puppeteer для автоматизации браузера.

  • Метод BUN.image позволяет изменять размер, поворачивать и конвертировать изображения без использования библиотеки Sharp.

  • Встроенная функция BUN.terminal предоставляет псевдотерминал для запуска Bash, Vim или HTOP прямо из JavaScript.

  • Глобальное виртуальное хранилище в BUN.install распаковывает пакеты на диске один раз и связывает их символьными ссылками с node_modules.

  • Общий размер бинарного файла BUN уменьшился на 17% несмотря на добавление новых функций.

타임라인

Обзор обновления BUN 1.4

  • Вышла версия BUN 1.4, переписанная на Rust.
  • Стандартная библиотека пополняется встроенными инструментами, заменяющими 15 сторонних зависимостей.

Обновление сосредоточено на расширении стандартной библиотеки JavaScript. Добавлены headless-браузер, библиотека изображений, псевдотерминал, разметка Markdown и задачи cron, что решает проблему отсутствия встроенных средств на фоне атак на цепочки поставок.

Встроенный headless-браузер и работа с изображениями

  • BUN.WebView заменяет Playwright и Puppeteer для простых задач автоматизации браузера.
  • BUN.image выполняет конвертацию, изменение размера и чтение метаданных изображений без библиотеки Sharp.

Новый API браузера на Mac использует системный WebKit, а на Windows и Linux может подключаться к экземпляру Chrome. Библиотека изображений обрабатывает файлы, управляет параметрами яркости и резкости, а также создает низкокачественные изображения-заглушки для предзагрузки в HTML.

Markdown, терминал и задачи cron

  • BUN.markdown преобразует текст в HTML, React.jsx или ANSI-терминал с помощью трех простых API.
  • BUN.terminal добавляет псевдотерминал для запуска интерактивных процессов вроде Bash или Vim из JavaScript.
  • BUN.cron запускает задачи в цикле событий или регистрирует их на уровне операционной системы.

Модуль разбора Markdown поддерживает таблицы GitHub и автоссылки, но требует самостоятельной очистки HTML для безопасности. Псевдотерминал заменяет Node.pty, обеспечивая цветной вывод и перемещение курсора. Планировщик задач поддерживает стандартный синтаксис cron с учетом местного часового пояса.

Параллельный запуск скриптов, архивы и прочие улучшения

  • Собственный параметр параллельного запуска скриптов заменяет concurrently и npm run all.
  • BUN.archive создает и читает tar и gzip архивы без полной распаковки файлов на диск.
  • Глобальное виртуальное хранилище в BUN.install экономит место на диске за счет символьных ссылок.

Встроенный механизм архивации позволяет читать файлы внутри архивов на лету. BUN.serve теперь напрямую отдает статические файлы, а также добавлены парсеры JSON5 и XML. Бинарный файл стал меньше на 17% благодаря переписыванию на Rust.

커뮤니티 글

아직 글이 없습니다. 이 영상에 대한 첫 번째 글을 작성해 보세요!

이 영상에 대해 글쓰기