Pull to refresh

Состоялся релиз Bun 0.8 — среды выполнения JavaScript и TypeScript

Reading time3 min
Views2.2K

Разработчики среды выполнения 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.

Tags:
Hubs:
If this publication inspired you and you want to support the author, do not hesitate to click on the button
Total votes 8: ↑8 and ↓0+8
Comments2

Other news