Разработчики среды выполнения JavaScript и TypeScript под названием Bun рассказали про релиз версии 0.8. В обновлении добавили поддержку отладки кода, веб-фрейворков Nuxt и SvelteKit и улучшили уже имеющиеся функции. Релиз Bun 1.0 запланирован на 7 сентября 2023 года.
Основные нововведения Bun 0.8:
добавили поддержку отладчиков через протокол инспектора WebKit. Для использования необходимо запустить файл или скрипт с флагом
--inspect
. После этого создастся HTTP-сервер и второй сервер Localhost WebSocket на неиспользуемом порту, который будет поддерживать связь с инструментами отладки:
$ bun --inspect server.ts
Listening on http://localhost:3000
------------------ Bun Inspector ------------------
Listening at:
ws://localhost:6499/0tqxs9exrgrm
Inspect in browser:
https://debug.bun.sh/#localhost:6499/0tqxs9exrgrm
------------------ Bun Inspector ------------------
флаг
--inspect
выводит в консоль ссылкуhttps://debug.bun.sh#
. Этот домен использует урезанную версию Safari Developer Tools, предназначенную для отладки Bun. Переход по ссылке автоматически запускает новую сессию отладки;с помощью новой команды
bun update
можно обновить все зависимости в проекте до последних версий в соответствии с данными вpackages.json
. Обновить конкретный пакет можно с помощью указания его названия в командеbun update zod
. Также важно отметить, что командаbun upgrade
обновляет саму среду выполнения, а не является синонимом кupdate
;добавили поддержку веб-фреймворка SvelteKit. Создать новый проект можно с помощью
create-svetle
:
$ bunx create-svelte my-app
create-svelte version 5.0.5
┌ Welcome to SvelteKit!
│
◇ Which Svelte app template?
│ SvelteKit demo app
│
◇ Add type checking with TypeScript?
│ Yes, using TypeScript syntax
│
◇ Select additional options (use arrow keys/space bar)
│ none
│
└ Your project is ready!
✔ Typescript
Inside Svelte components, use <script lang="ts">
Install community-maintained integrations:
https://github.com/svelte-add/svelte-add
Установить зависимости и запустить сервер разработки можно так:
$ cd my-app
$ bun install
$ bun run dev -- --open
Приложение будет доступно по адресу localhost:3000
.
добавили поддержку веб-фреймворка Nuxt, для создания проекта необходимо использовать набор инструментов
nuxi
:
$ bunx --bun nuxi init my-app
$ cd my-app
$ bun install
После этого можно будет запустить сервер разработки:
$ bun --bun run dev
$ nuxt dev
Nuxt 3.6.5 with Nitro 2.5.2
> Local: http://localhost:3000/
> Network: http://192.168.0.21:3000/
> Network: http://[fd8a:d31d:481c:4883:1c64:3d90:9f83:d8a2]:3000/
✔ Nuxt DevTools is enabled v0.8.0 (experimental)
ℹ Vite client warmed up in 547ms
✔ Nitro built in 244 ms
Приложение будет доступно по адресу localhost:3000
.
добавили поддержку потоковой передачи ответов с помощью функции
fetch()
. Это значит, что можно не дожидаться всего ответа и получать его по частям:
const res = await fetch("https://example.com/bigfile.txt");
// read the response chunk-by-chunk!
for await (const chunk of res.body) {
console.log(chunk);
}
В блоге разработчиков рассказали, что это можно использовать для передачи ответов из API OpenAI:
import OpenAI from "openai";
const openai = new OpenAI({
apiKey: "my api key",
});
const stream = await openai.chat.completions.create({
model: "gpt-4",
messages: [{ role: "user", content: "Say this is a test" }],
stream: true,
});
for await (const part of stream) {
process.stdout.write(part.choices[0]?.delta?.content || "");
}
реализовали полную поддержку библиотек
inquirer
,enquirer
иprompts
, предназначенных для создания интерактивных инструментов командной строки;появилась поддержка
test.each
иdescribe.each
из Jest, что позволяет запускать тесты с разными входными данными:
describe.each([
[1, 1, 2],
[1, 2, 3],
[2, 1, 3],
])("add(%i, %i)", (a, b, expected) => {
test(`returns ${expected}`, () => {
expect(a + b).toBe(expected);
});
});
добавили новый глобальный конструктор
File
, предназначенный для работы с файлами:
const file = new File(["hello world"], "hello.txt", {
type: "text/plain",
lastModified: Date.now() - 1000,
});
file.size; // 11
file.name; // "hello.txt"
file.type; // "text/plain"
file.lastModified; // 1693597759310573
Среда выполнения Bun полностью совместима с Node.js, но исправляет его проблемы. К примеру, Bun работает быстрее и включает в себя все необходимые инструменты. Также у среды выполнения предусмотрен собственный пакетный менеджер, совместимый с npm
.
Установить Bun можно с помощью curl
, npm
, brew
или docker
. На сайте проекта доступна документация для разработчиков, а код проекта опубликован на GitHub.