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

от автора

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


ссылка на оригинал статьи https://habr.com/ru/articles/756670/