Včera vyšla nová verzia javascriptovej runtime platformy Bun 1.1. Najdôležitejšou novinkou je pridaná podpora pre Windows. Zlepšil sa výkon a boli pridané nové API.
Okrem výkonu, ktorý má byť niekedy rádovo vyšší ako konkurenčný Node alebo Deno, má Bun viacero zaujímavých vlastností. Ide o all-in-one toolkit pre vývoj aplikácií v jazykoch JavaScript a TypeScript.
Bun má viacero predností:
- priamo spúšťa TypeScript kód
- je výkonným balíčkovým manažérom
- má zabudovaný test runner kompatibilný s jest
- podporuje JSX syntax
- má multiplatformovú podporu pre shell scripty
- kompiluje JS/TS kód do binárok
- má zabudovanú podporu pre Web APIs
> powershell -c "irm bun.sh/install.ps1 | iex"
Inštalácia na Windows je jednoduchá, stačí spustiť tento Powershell script.
import { Database } from "bun:sqlite";
const sql = `
CREATE TABLE cars(id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR(255), price INT);
INSERT INTO cars(name, price) VALUES('Audi', 52642);
INSERT INTO cars(name, price) VALUES('Mercedes', 57127);
INSERT INTO cars(name, price) VALUES('Skoda', 9000);
INSERT INTO cars(name, price) VALUES('Volvo', 29000);
INSERT INTO cars(name, price) VALUES('Bentley', 350000);
INSERT INTO cars(name, price) VALUES('Citroen', 21000);
INSERT INTO cars(name, price) VALUES('Hummer', 41400);
INSERT INTO cars(name, price) VALUES('Volkswagen', 21600);
`
const db = new Database(":memory:");
db.run(sql);
const query = db.query('SELECT MAX(price) AS max_price FROM cars');
const res = query.get();
console.log(res.max_price);
query.finalize();
Bun priamo podporuje prácu s databázou SQLite. Tento script vytvorí tabuľku v pamäti a získa z nej maximálnu hodnotu ceny stĺpca price.
const response = await fetch("https://webcode.me");
const html = await response.text();
console.log(html);
Bun priamo spúšťa fetch funkciu z Web API bez potreby dodatočnej inštalácie externej knižnice.
import { load } from 'cheerio';
const url = 'https://root.cz';
const response = await fetch(url);
const body = await response.text();
let $ = load(body);
let title = $('title');
console.log(title.text());
Vývojári tvrdia, že Bun podporuje väčšinu Node knižníc. Potom čo si stiahneme knižnicu cheerio bun add cheerio môžeme príklad priamo spustiť pomocou bun get_title.js.
> bun build get_title.js --compile --outfile gettitle > gettitle Root.cz - informace nejen ze světa Linuxu
Kód môžme tiež skompilovať do binárky.
Bun je zároveň test runnerom. API je kompatibilné s modulom jest.
// arith.js
const add = (a, b) => a + b;
const mul = (a, b) => a * b;
const sub = (a, b) => a - b;
const div = (a, b) => a / b;
// export default { add, mul, sub, div };
module.exports = { add, mul, sub, div };
V module bun:test máme funkcie pre testovanie.
// arith_test.js
import { add, mul, sub, div } from './arith';
import { expect, test } from "bun:test";
test('2 + 3 = 5', () => {
expect(add(2, 3)).toBe(5);
});
test('3 * 4 = 12', () => {
expect(mul(3, 4)).toBe(12);
});
test('5 - 6 = -1', () => {
expect(sub(5, 6)).toBe(-1);
});
test('8 / 4 = 2', () => {
expect(div(8, 4)).toBe(2);
});
Testy spustíme pomocou príkazu bun test.
Plugin pre VS Code je zatiaľ veľmi rudimentárny. Pre lepšiu podporu Bunu pre editory si budeme ešte musieť nejaký čas počkať.