Vi har tidligere skrevet om at JavaScript-kjøremiljøet Bun har fått S3-støtte, en endring ikke alle var like begeistret for.
Onsdag kveld kom versjon 1.2, med enda mer nytt – der en av de aller mest interessante nyhetene er innebygget støtte for PostgreSQL.
I tillegg har Bun 1.2 også fått en masse andre spennende nyheter, som ifølge Bun-skaper Jarred Sumner skal gjøre det enklere enn noensinne å bygge fullstack-applikasjoner.
Introducing Bun 1.2 bun.sh/blog/bun-v1.2
— Bun (@bun.sh) January 22, 2025 at 10:32 PM
[image or embed]
Og "selvfølgelig" har Bun blitt raskere enn forgjengeren. For eksempel vil en Express-server som kjører på Bun 1.2 være tre ganger raskere enn om den hadde kjørt på Node.js, mens Bun 1.1 er "bare" 2,2 ganger raskere.
#1: Innebygget PostgreSQL
Bun har helt siden starten hatt en innbygget SQLite-klient, men fra versjon 1.2 er også en PostgreSQL-kompatibel SQL-klient innebygget: Bun.sql.
Bun.sql er inspirert av den populære npm-pakken postgres.js. Syntaksen skal være helt lik, så bruker du postgres.js fra før skal det å bytte til Bun.sql være så enkelt som å bare endre importen.
Bun.sql bruker "tagged template literals" for å lage spørringer. Dette har den fordelen at du kan bruke verdier fra JavaScript i spørringene dine uten å risikere SQL injection-angrep. Bun.sql sørger for å automatisk "escape" strenger og sørge for at alt foregår på en trygg måte.
Dermed kan du gjøre for eksempel dette:
import { sql } from "bun";
const users = [
{ name: "Alice", age: 25 },
{ name: "Bob", age: 65 },
];
await sql`
INSERT INTO users (name, age)
VALUES ${sql(users)}
`;
Og vil du lese rader fra en tabell kan du gjøre det slik:
import { sql } from "bun";
const seniorAge = 65;
const seniorUsers = await sql`
SELECT name, age FROM users
WHERE age >= ${seniorAge}
`;
console.log(seniorUsers); // [{ name: "Bob", age: 65 }]
Det skal for øvrig komme MySQL-støtte også om ikke lenge.
#2: Raskere og bedre bun install
Frem til nå har Bun av ytelsesmessige årsaker brukt en binær lock-fil. Men de har fått klager fra utviklere som har påpekt at disse har vært umulig å se igjennom ved pull requests og vanskelige å ha med å gjøre ved merge-konflikter.
– Hva skjer hvis du mottar en pull request fra en ekstern bidragsyter som endrer bun.lockb-filen? Stoler du på den? Antagelig ikke, skriver Ashcon Partovi i Bun i lanserings-bloggen.
Derfor bytter Bun nå til en tekstbasert (JSON) lock-fil, slik som de fleste andre.
Og ifølge Bun selv så har de noen smarte triks på lur, slik at bun install med versjon 1.2 faktisk har blitt 30 prosent raskere enn Bun 1.1 – selv uten binær lockfil.
#3: Import av HTML-filer
Vi nevner til slutt at Bun har fått støtte for import av HTML-filer. Det betyr at du kan importere en HTML-fil på denne måten:
import homepage from "./index.html";
Bun.serve({
static: {
"/": homepage,
},
async fetch(req) {
// ... api requests
},
});
Når serveren er oppe og kjører og du besøker "/", vil Bun automatisk bundle <script>- og <link>-tagger i HTML-filene, eksponere dem som statiske ruter, og serve resultatet.
– HTML imports forenkler hele frontend-toolchainen din til ett enkelt import-statement, men skanner HTML-en og automatisk minifyer og bundler JavaScript og CSS, sier Bun-skaper Jarred Sumner i introvideoen.
Her kan du se Buns egen introvideo av de viktigste nyhetene: