Bun 1.4 – вбудованыя адзінкі, які можаюць заменіць Sharp, Puppeteer, node-pty і іншыя.
Практычны ўражын пра вбудаваныя функцыі Bun 1.4: адобразаванне зображэнняў, прыгледчык, Markdown, cron, тэрмінал, паралельныя скрыпты і аптарынкі тэставання, а таксама як безпечна ўпрабаваць іх у рэальных проектах.
Тыповы проект на JavaScript сабірае залежнасці для кожнай неабяжной функцыялкі: sharp для обработкі зображэнняў, парсер Markdown, Playwright або Puppeteer для автаматызаціі прыстрояў перагляду, бібліятэку cron, node-pty для псевдотэрміналаў, concurrently або npm-run-all для паралельных скрыптов, а таксама велікі набор налашоўкаў CI, якія спрыяюць шыранню тэстаў. Bun 1.4 займае іншую пазіцыю: багато з гэтых функцый можна реалізаваць пры самай експлуатацыі. У гэтым кярыюце практычныя прыклады новых вбудоўаных функцый, якія можна выprобаваць, а таксама пропонуецца спосаб без вялікага рызыку для ўцэнкі іх эфектыўнасці.
За даннай інформацыяй пра выпуск, Bun 1.4 быў выпусцены 20 серпня 2026 года, ён адключае больш чым 1 500 тэстоў сумаспадобнасці з Node.js, вылечвае паўторы 2 900 проблем і зменшае выкарыстоўванне CPU і памяці калі програма не працуе. API гэтага новага выпуску можа ўсё ж змяніцца, таму спытайцеся вважаць наведаную нижэй інформацыю толькі моментальным станам речэй і паўнастаціце яе з офіцыяй ананунцацыей Bun 1.4 і чыннымі дасведчэннямі. Галоўная мета гэтага выпуску — не столькі падвышэнне швальнасці, сколькі зменшэння размера набору інструментаў.
Інсталляцыя або апдэйт
Bun можна інсталаваць за дапамойкай шэл-скрыпта, npm, Homebrew, PowerShell на Windows або як образ Docker. Кожная пазначаная нижэй лінія — гэта адна з альтернатываў; выберыце тую, якая падходзіць вашай средовыце:
--curl
curl -fsSL https://bun.sh/install | bash
--npm
npm install -g bun
--brew
brew install oven-sh/bun/bun
--powershell
powershell -c "irm bun.sh/install.ps1 | iex"
--docker
docker pull oven/bun
Якщо Bun вялікі ўжо на вашым комп’ютеры, адна команда пераведзе вас да найновейшага выпуску:
bun upgrade
Обробка зображэнняяў за дапамойкай Bun.Image
Bun.Image пераносіць процесы дэкодавання, зменшэння/збільшэння размеру, роцірання і кодавання звычайных форматаў у час выконання, таму вам больш не патрэбна залежнасць ад натыўных форматаў зображэння. Наведзены выклад караце JPEG-файл, размешчае яго ў прасторе 1024 на 1024 паказваючы пры гэму співвядзенне сторон, роцірае яго, кодуе як WebP з якасцю 85 і запісвае рэзультат:
await Bun.file("photo.jpg")
.image()
.resize(1024, 1024, { fit: "inside" })
.rotate(90)
.webp({ quality: 85 })
.write("thumb.webp");
Паколькі кожны крок вяртае той самы об’ект-будавальнік, цяперашня ланцоўка працюе зверху вярху, як рэцепт. Тыповыя прымененні включаюць стварэнне мініатюр для аплодавання, зменшэння/збільшэння размеру аватараў, пераканвертаванне JPEG у WebP, викорыстоўвання API для зображэнняў і оптымізацыю асетаў пры ўведэнні іх у схованне.
Bun адзвярцает, што яго рэалізацыя пераважае sharp у калькі зі своіх сабэнчмаркаў, уключаючы змену размары і кодаванне PNG-файла 1080p. Іншыя значныя прынтэсы — гэта адсутнаець натыўнага модуля, які часта ускладняе стварэнне проектаў у Docker і кешы CI. Якщо вы завісіце ад прыглушаных функцый sharp, пераканайцеся, што оперэйшыны, якія вы викорыстоўваете, існуюць, прычымляючыся да Bun.
Автаматызацыя браузера без адпаведнага интерфейсу за дапамой Bun.WebView
Bun.WebView — это вбудованы API безаадпаведнага браузера, які можа навігаваць, клікаць, прасуваць, выкананы JavaScript і фіксаваць скріншоты. Зверніце ўвагу на декларацыю await using: яна прыяўляе трымачасць відображэння да абрамоўваючага контексту, таму браузер автаматычна зваліваецца, калі блок завершаецца, нават у разы бягучых аднойчын.
await using view = new Bun.WebView({
width: 800,
height: 600,
});
await view.navigate("https://bun.sh");
await view.click("a[href='/docs']");
const title = await view.evaluate("document.title");
await Bun.write(
"page.png",
await view.screenshot()
);
Скрыпт ачыяе сторанку, пераходзіць па спялунку, чытае заголовак докумэнта і зберагае скріншот. Гэта дазволяе выканаць многія невеликі заведамы без неабяжнаею наявнасцю цэлага фрэймворка для аўтаматызаціі: службы для стварэння скріншотаў, тесты на працясную роботу, адпамогчыкі для выкарыстоўвання дадзеных з інтэрнету, пераконтраванне часу працы, апранкі для пераконтравання спялунк і простыя процесы контролю якасці. Калі патрабуецца болей высокі рэгламент, Bun.WebView адкрывае можлівасць выкарыстоўваць протакол Chrome DevTools. Для большых комплексных рашэнняў, якія трэбуюць падтрымкі разных прыгледачоў, верагодна, краща будзе выкарыстоўваць спецыяльны інструмент.
Атрыбутаванне Markdown за дапамойкай Bun.markdown
Bun.markdown ператварае Markdown у розныя форматы. Найпростейшы варіант вяртае строку HTML:
const html = Bun.markdown.html(
"# Hello **world**"
);
Ён таксама можа безпасабліва ствараць элементы React, што ўжо корыстна, калі компонент атрыбутавае сторанку з інструкцыямі аднароджэння чыстаю інфармацыяй:
export default function Page() {
return Bun.markdown.react(readme);
}
Рэндарынг можа быть далей налаштаваны, напрыклад, для форматавання выходных дадзеных для тэрміналу. Падтрымляюцься расшырэнняя Markdown у стылі GitHub, такія як табліцы, спісы задач, падчёркнуты текст і автаперыявленняя. Гэта падходзіць для сайтов дакументацыі, порталоў разработчыкаў, блогаў, праграм для перазіранняя README-файлаў, дапамогі для CLI, баз знанняй і інтэрфейсаў, якія адображаюць Markdown, створаны модэлем.
Адна застережненне мае большое значэнне чым іншыя: HTML-выходны тэкст не практыкуецца. Будзь-які Markdown ад корыстнікаў, трэціх сторон чы ўсёвядомага мовнага модэля павінен працягнуцца через санітайзер перш чым прайсці да браузера, інакш вы стаеце вясковым да втрымкі скрыптаў.
Запланаваныя задачы з Bun.cron
Bun.cron() працюе ў двух режымах. У першым режыме ён рэгіструе задачу у планавальніку операцыйной системы: crontab у Linux, launchd у macOS і Task Scheduler у Windows. Функцыя прыймае шлях скрыпты, выраз cron і назву задачы; гэта задача запускае працоўнік кожны панедзелак о 02:30:
await Bun.cron(
"./worker.ts",
"30 2 * * MON",
"weekly-report"
);
Паколькі планавальнік належыць операцыйной системе, задача запускаецца нават калі процес Bun не ўвядзен у роботу. У другім режыме планавальнік знаходзіцца ў самам працюючым процесе, і тут задача запускаецца кожныя пяць хвілін. Декларацыя using зупіняе задачу, калі заканчываецца ўсё яе тэриторія дзейнасці:
using job = Bun.cron(
"*/5 * * * *",
async () => {
await cleanupTempFiles();
}
);
Экзекуцыі ніколі не перакрываюцца, і падтрымляюцца явныя часовыя зоны. Хорашымі варухамі ў такіх сцэнаріях являюцца працавнікі, якіе выкарыстоўваюць ресурсы для чысткі, стварэнне звярненняў, тыпавое адтрыманне дадзэнняў, сінхронізацыя дадзэнняў, обработка пачаканых электронных паведамленняў і періядычнае адбіранне даных. Памятайце, што задачы, якія выконваюцца ў межах адного процесу, зникаюць, калі процэс пачынаецца занова, і якщо вы запускаеце калькі реплік, кожная з іх будзе выконвана, якщо толькі вы не дадзеце інструкцый па коордынацыі.
Выконанне скрыптав паралельна
bun run --parallel заменяе concurrently і npm-run-all. Перадайце калькі назв скрыптав, ўбачыма выконваць іх адразу:
bun run --parallel build test
Шаблоны типу glob выбіраюць групу скрыптав:
bun run --parallel "build:*"
У поўнай злучэнні з параметрам --filter той самы флаг дазволяе выконваць скрыпт у кожнай рабочай прасторы:
bun run --parallel --filter '*' build
Зазвычай адна неудача зупіняе ўсё; параметр --no-exit-on-error дазволяе засталым задачам завершыцца, што ўжоць карысна для адразувога збору всех неудачных тэстав:
bun run --parallel --no-exit-on-error --filter '*' test
Кожны лінійкі выходных дадзеных пачаткаецца з назывкі скрыпты, якая іх створыла, таму сумешаныя лог-запісы застаюцца чытабельнымі. У манорепо гэта заменяе последовальную ланцюгавую структуру на роботу, распадзеленую між ядрамі CPU.
package A → build
package B → build
package C → build
Паралельныя запускі не розумеюць залежнасцей між пакетамі, таму якщо адзін пакет должен быць створаны раней за іншы, вам все рава патрэбна певная архітектура запуску або інструмент для керавання задачамі, які б моделюваў граф залежнасцей.
Шырэйшыя запускі тэстаў
bun test абярнуты флагам --parallel:
bun test --parallel
Вы можете явна задаць колькісць працоўных процэсаў:
bun test --parallel=4
Файлы передаюцца працоўным процэсам дынамічна, а не падзеляюцца на фіксаваныя групы заздалегідь, таму адзін повольны файл не заставляе іншыя працоўныя процэсы без дзеяння. Тры скарысты флагі прызначаны для CI-сервісаў. Метод шардавання дзеліць набор тэстаў між разнымі апаратамі; тут показана першая з трох частак:
bun test --shard=1/3
Выконанне толькі тых тэстаў, якія падвергліся змянам, скорачае час адпаведзей у локальных цыклах:
bun test --changed
Фіксацыя трываласці выконання дазволяе пазнейшым запускам балансаваць роботу на адной основе рэальных дадзеных пра час:
bun test --timings=timings.json
Паралельнае выкананне адкрывае тэсты, якія дзелюць станом — напрыклад, спакульную базу дадзеных, фіксаваныя порты чыстаўкі. Чакайце, што дзеякія проблемы з ізоляцыёй патрэбуе рашэння ў першы раз, калі вы яго увялічыце.
Усуненне вразламных залежнасцей
Для падтрымкі безпекі є вбудованыя каманды:
bun audit fix
Яны апдэйтаваюць вразламыя пакеты да выправленых версій і інсталююць іх. Калі для выправлення патрэбна змена на большую версію, Bun адзвярнёцца ад яе застосавання; ўвядзіце --latest, каб увялічыць версію. Разглядзіце такія значныя апдэйты як будь-якія змены, якія можаюць спануліць проблемы. У CI безпека залежнасцей адбываецца ў рамках звычнага крока інсталляціі.
Удаленне дублікатных залежнасцей
У большых проектах частаўна існуе калькі працожных версыйяў адной пакета:
esbuild@0.15.10
esbuild@0.15.11
Калі адна версыя задовольняе ўсе выкліканні, гэты каманды з’еднае дублікаты:
bun dedupe
Як толькі застаюцца дублікаты, перакананне паводзіцца да памылкі, што робіць яго ідальным элементам CI:
bun dedupe --check
Меншыя калькі дублікатаў значаць меньшыя дрэвы залежнасцей, быстрэйшая установка, меньшы відпрацоўванне дыска, простейшая адпільнавання і, можа, меншыя розгортанні.
Кераванне інтерактывнымі програмамі за дапамой Bun.Terminal
Bun.Terminal — гэта вбудованы псевдотермінал, які дазволяе JavaScript кераваць інтерактывнымі програмамі без node-pty:
bash
vim
htop
Псэўдатэрмінал мае важнае значэнне, таму што такія прыграмы паводзяцца інакше, калі выкрываюць рэальны тэрмінал: яны ствараюць інтэрфейсы на весь экран, выкарыстоўваюць кольоры і чакаюць натыкання на клавішы. Гэта робіць Bun.Terminal актуальным для інструментаў разработчыка, CLI-інструментаў, панелей керування тэрміналамі, інструментаў даявання здалёка, інтэрактываў аўтоматызаціі і агентаў для кодавання на базе AI, якія все чышэй працуюць безпасуль.
Сумеснасць з Node.js і Next.js
Змяны, які можу маты самыя значныя наследкі, — гэта скорей сумеснае працаванне, чым якія-небудзь новыя API. У выданні дадаўся 1,517 тэстоў для Node.js, а таксама зазначаныя паліпшэнняя ў модулях, укладзеных у http, fs, stream, cluster, timers, zlib і vm. Таксама адзначаная лепшая падтрымка ў калькі катэгорыяў: фреймворках (Next.js 16, Nuxt, Fastify), інструментах для тэставання (Vitest, Playwright, Testcontainers), апарату для стэкхолдінгу (OpenTelemetry і dd-trace ад Datadog) асабліва кліентах для обробкі дадзеных чы інфраструктуры (TypeORM, RabbitMQ і AWS S3).
Флаг --bun змушвае CLI інструмента працаваць пад Bun у змену бінарнаму файлу Node.js, названаму ў яго shebang. За інформацыяй з выдання, гэта працуе з Next.js 16.3, Turbopack і React Compiler:
bun --bun next build
Адаптаванне ў канечнай лініі залежыць ад таго, чы рэчыскі праект зможаць выжыць пасля пераходу, таму успешна компіляцыя вашага сэрвісу мае большую ценна, чым будзь-які опублікованы критэрый.
Тверджэння пра выконавчую спроможнасць у контексте
Результаты тэстаў Bun для версіі 1.4 паказваюць прыблізна у пяці разоў меньшую актывацыю CPU у стане спакою, значна меньшы вопыт выкарыстоўвання памяці пад работай з HTTP-запытамі, а таксама шырэйшы стартаванне на Linux і Windows. Это цифры, апрацоўваныя виробнікамі, таму іх трэба спрыймать як керуючыя показнікі. Меньшая актывацыя CPU, вопыт памяці і час стартавання могу прыводзіць да дышэўнейшых і шырэйша реагуючых сервісоў, але толькі вашы сэрвісы могу гэта падтвердзіць. Чыбаўшы шырэйшую інфармацыю пра компромісы пад час выканання, адзірніце нашу порэванае Node.js, Deno і Bun.
Безбедны спосаб ацэнкі Bun 1.4
Перакладчыцкая перабудова цэлага прыемнага системы рэдкасцю ёст мудрай выбар. Кращае работаюць маленькія, вярнаблівыя эксперыменты.
Пачніце новы API
Створыце шаблон проекта і адколеце маленькія службы за дапамою Bun.serve:
bun init
Заменіце адзін процес обробкі зображэння
Перанесіце адзін пайплайн sharp у Bun.Image і параболіце якасць выходных дадзеных і час ўжыцця.
Перанесіце адну запланаваную задачу
Выберыце простую задачу cron і пераадколеце яе за дапамою Bun.cron().
Паралелізавайце свае тэсты
Запустіце існуючы набор тэстаў паралельна і запісайце, якія тэсты не працуюць чераз спакульнае становішча:
bun test --parallel
Адчыстыце залежнасці
Апробавыце каманды для абезпекі і усунення дублікаў на галузі і перагляньце разлік:
bun audit fix
bun dedupe
Створыце свой прыклад Next.js пад Bun
Запустіце версію для практычнага викорыстоўвання з рантаймам Bun і парабяльце яе з вашым нынешнім процесам:
bun --bun next build
У кожным случае трэба мерыць рэзультаты, а не пакладацца на опублікованыя крэйтывыя тесты.
Тэндэнція к консалідацыі
Bun 1.4 — это не столькі список новых API, сколькі рантайм, який перэбирае на сябе задачы, якія раней належалі разным пакетам. Апроксыматываючы, гэта шар рантайма з API Node.js, шар інструментаў, які включае тэсты, скрыпты, меры безпекі, CI і тэрміналы, а таксама шар бібліятэкаў для обработкі зображэнняў, Markdown, браузераў і cron:
Bun 1.4
│
┌─────────┼──────────┐
│ │ │
Runtime Tooling Libraries
│ │ │
Node.js Testing Image
APIs Scripts Markdown
Security Browser
CI Cron
Terminal
Экасыстэма npm атрымала свою сілу за рахунак складання тыяў тысяч маленькіх пакетаў, але гэтая сіла карыцца залежнасцямі, налагоджэнням, работай з сумасставленнем, апдэйтамі безпекі і фрагментаванымі інструментамі. Bun ставіць на працоўнае прынцыпу: включае корыстныя прымітівы працоўна ў сам рантайм.
Ключовыя выводы
- Пытанне, якое варта задаць, змінілася з "Чы рошты Bun быстрэй, чым Node.js?" на "Калькі з маёй тэхналогічной структуры можа заменіць Bun?"
- Вбудованыя элементы зменшаюць колькасць залежнасцяў ад натыўных тэхналогій, але пераканайцеся ў роўнасці функцыйяй пры замене апытных бібліятэкаў, такіх як
sharpчы Playwright. - Захоўвайце цэласць HTML-рэзультата, вырабленага
Bun.markdown, калі інпут не ўзяты з надзею. - Паралельныя скрыпты і тэсты дапамагаюць швыта ўскорыць роботу, але яны выяўляюць прыхованыя проблемы з порядкам выкарыстоўвання элементаў чы спільным станом.
- Спрыймайце критэрыя, практыкуемыя вендорамі, як гіпотэзу і пераканайцеся ў функцыйональнасці кожнай фічыры ў сваіх рэальных умовах прыемкі.