Оновлення Bun 1.2: що нового

💡 Усі статті, обговорення, новини про Front-end — в одному місці. Приєднуйтесь до Front-end спільноти!

Вийшла нова версія Bun 1.2. В ній команда зосередилась на сумісності з Node.js та впровадженні нових можливостей. Що в ній цікавого та нового? Давайте розбиратися.

Сумісність з Node.js

Команда Bun запровадила регулярне тестування модулів Node.js для кожного оновлення. Завдяки цьому вдалося знайти та виправити понад тисячу помилок. Тепер такі модулі, як fs, crypto, http, stream, path, net та багато інших, проходять більше 90% офіційних тестів у середовищі Bun.

Вбудовані API для S3 та Postgres

Версія 1.2 представила нові вбудовані API: Bun.s3 для роботи з об’єктним сховищем S3 та Bun.sql для взаємодії з базами даних Postgres.

Bun.s3


Новий API Bun.s3 можна використовувати для доступу до стандартного S3Client. Клієнт надає метод file(), який повертає «ліниве» посилання (англ. lazy-reference) на файл у S3. Цей API працює так само, як і API File у Bun.

import { s3 } from "bun";
const file = s3.file("folder/my-file.txt");
// file instanceof Blob
const content = await file.text();
// or:
//   file.json()
//   file.arrayBuffer()
//   file.stream()

Також варто зазначити, що клієнт S3 у Bun написаний на нативному коді замість JavaScript. У порівнянні з використанням пакетів, таких як @aws-sdk/client-s3 у Node.js, він працює у 5 разів швидше під час завантаження файлів із S3-бакета.

Bun.sql

Bun.sql — це новий клієнт із підтримкою Postgres, а найближчим часом очікується і підтримка MySQL.

Його можливості представляють наступне:

  • Запити виконуються за допомогою тегованих шаблонних літералів.
  • Параметри передаються через JavaScript-значення, автоматично екрануючи дані для захисту від SQL-ін’єкцій.
  • Підтримуються підготовлені запити, кешування структур і пул з’єднань для підвищення швидкодії.

Наприклад:


import { sql } from "bun";
const users = [
  { name: "Alice", age: 25 },
  { name: "Bob", age: 65 },
];
await sql`
  INSERT INTO users (name, age)
  VALUES ${sql(users)}
`;
const seniorAge = 65;
const seniorUsers = await sql`
  SELECT name, age FROM users
  WHERE age >= ${seniorAge}
`;
console.log(seniorUsers); // [{ name: "Bob", age: 65 }]

Також він швидше на 50% за інші клієнти завдяки тому, що написаний на нативному коді.

Перехід від postgres.js на Bun.sql

Для того, щоб перейти від postgres.js на Bun.sql, достатньо просто оновити імпорти та налаштування:

import { postgres } from "bun";
const sql = postgres({
  host: "localhost",
  port: 5432,
  database: "mydb",
  user: "...",
  password: "...",
});
const users = await sql`SELECT name, age FROM users LIMIT 1`;
console.log(users); // [{ name: "Alice", age: 25 }]

Текстовий файл блокувань

Bun давно виділявся використанням binary lockfile (bun.lockb), що забезпечувало швидкість bun install до 30 разів вищу за npm. Але це рішення мало свої недоліки:

  • Неможливо переглядати lockfile на GitHub чи інших платформах.
  • Важко вирішувати конфлікти злиття в командній роботі.
  • Зовнішнім інструментам, як-от Dependabot, було складно інтегруватися з bun.lockb.

Тому в Bun 1.2 формат lockfile змінено на текстовий (з підтримкою Git). Тепер файл bun.lock легко читати, редагувати й інтегрувати.

Bun все ще підтримує bun.lockb, але тепер текстовий формат є стандартом.

Інші зміни

Окрім всього вищезазначеного в останній версії:

  • Виконання JavaScript відбувається на 20-30% швидше, ніж у попередніх версіях.
  • Швидкість bun install зросла
  • Прискорено компіляцію TypeScript
  • Додано підтримку завантаження .node файлів
  • Розширили підтримку TypeScript

В майбутньому команда Bun планує нарощувати підтримку Node.js API, інтеграцію з WebAssembly та оптимізацію роботи з великими проєктами.

З усіма змінами ви можете ознайомитися в цьому відео 👇

👍ПодобаєтьсяСподобалось4
До обраногоВ обраному1
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Підписатись на коментарі