스크립트
00:00:00Buns größtes und umstrittenstes Update ist gerade erschienen: Bun 1.4, der Rust-Rewrite.
00:00:04Ich habe ja schon früher ein Video über das Rewrite-Drama gemacht, konzentrieren wir uns also auf das Neue,
00:00:07denn manches davon gefällt mir wirklich gut, besonders die Neuerungen in der Standardbibliothek,
00:00:11da Bun jetzt einen integrierten Headless-Browser, eine Bildbibliothek, ein Pseudoterminal, Markdown,
00:00:15Cronjobs, Tabellen und mehr bietet und damit 15 Dependencies ersetzt, die ihr vielleicht nutzt.
00:00:19In den letzten Jahren war das Fehlen einer Standardbibliothek eine der größten Beschwerden
00:00:23über JavaScript. Bun behebt das nun, was in einer Welt wöchentlicher Supply-Chain-Angriffe ein ziemlich guter Schritt ist.
00:00:30Als Erstes können wir Playwright und Puppeteer deinstallieren und stattdessen Bun WebView verwenden.
00:00:37Mit diesem Code hier kann ich einen Headless-Browser steuern, den Abonnieren-Button finden und anklicken,
00:00:41wobei ich das noch nicht auf eurem Rechner ausführen kann, ihr müsst also selbst auf Abonnieren klicken.
00:00:44Alle Eingabemethoden wie Click, Type, Press und Scroll lösen native Browser-Ereignisse aus,
00:00:48sodass die Seite denkt, ihr wäret ein echter Nutzer. Unter Mac nutzt dies das systemseigene Webkit,
00:00:52also die Safari-Engine, wodurch nichts installiert werden muss. Wenn ihr jedoch eine Chrome-Instanz wollt,
00:00:56könnt ihr die Backend-Option auf Chrome stellen, wodurch eine installierte Chrome- oder Chromium-Instanz genutzt wird,
00:01:01was ihr tun würdet, wenn ihr Windows oder Linux verwendet. Dies kann tatsächlich einen Headless-Chrome-
00:01:04Unterprozess starten oder sich mit einer bereits laufenden Chrome-Instanz verbinden. Mit diesem Code hier
00:01:09kann ich also die offene Version von Chrome auf meinem Mac steuern, komplett über Bun. Darüber hinaus
00:01:13könnt ihr auch Evaluate nutzen, um JavaScript auf der Seite auszuführen und die Ergebnisse als native
00:01:17JavaScript-Werte zurückzubekommen. Und falls es für eine gewünschte Funktion noch keine API gibt, könnt ihr auf
00:01:21die rohen CDP-Befehle zurückgreifen. Ich sehe das als ziemlich gut für einige leichtgewichtige Browser-Automatisierungen an,
00:01:25wobei es Playwright meiner Meinung nach noch nicht vollständig ersetzt – es hat keinen Test Runner oder Trace Viewer,
00:01:29aber für Dinge wie Scraping oder Computer-Use-Skripte ist es keine schlechte Option.
00:01:32Als Nächstes deinstallieren wir Sharp und verwenden stattdessen Bun.image. Dies ist eine vollständige Bildbibliothek,
00:01:37mit der wir eine Datei nehmen, .image darauf aufrufen und dann Operationen verketten können, wie Größenänderung, Drehen,
00:01:42Spiegeln (horizontal und vertikal), Anpassen von Helligkeit und Schärfe sowie Konvertierung in eine Reihe
00:01:46verschiedener Bildformate. Außerdem lassen sich Metadaten wie Breite, Höhe und Format auslesen,
00:01:50ohne die Pixeldaten zu decodieren. Eine weitere tolle Option, die ich wirklich mag, ist die Möglichkeit, ein
00:01:54Platzhalterbild zu erstellen. Dies ist eine qualitativ minderwertige Version, die ihr in HTML einbinden könnt, bevor das echte Bild
00:01:59lädt. Bun.image ist eines der Features, auf deren Nutzung ich mich am meisten freue, da ich bei Deployments
00:02:04und Builds schon öfters probleme im Zusammenhang mit Sharp hatte. Wenn ich jetzt Bun verwende,
00:02:08muss ich darüber nicht mehr nachdenken. Ich muss auch nicht mehr über Marked nachdenken, da wir jetzt
00:02:12einfach Bun.markdown zum Parsen von Markdown verwenden können. Das umfasst drei APIs.
00:02:16Bun.markdown.html rendert Markdown in einen HTML-String. Bun.markdown.render rendert Markdown mit
00:02:22benutzerdefinierten Callbacks für jedes Element. Das gibt euch die Flexibilität, HTML mit eigenen CSS-Klassen,
00:02:27ANSI-Terminalausgaben oder jedem anderen String-Format zu rendern. Bun.markdown.react rendert Markdown in React.jsx,
00:02:33und auch hier könnt ihr für jedes Element jede beliebige Komponente übergeben, um wirklich sehr
00:02:37schön gestaltetes Markdown zu erhalten. Es gibt zudem eine Reihe von Optionen, die ihr umschalten könnt, um die
00:02:41gewünschten Markdown-Funktionen zu steuern. Ihr könnt Dinge wie GitHub-formatierte Tabellen, Autolinks,
00:02:45Überschriften-IDs und Wiki-Links nutzen – wobei eine Warnung darauf hinweist, dass die HTML-Ausgabe nicht bereinigt wird.
00:02:50Rohes HTML, Event-Handler-Attribute, JavaScript – all das gelangt ungeprüft hindurch. Wenn ihr also
00:02:54Markdown rendert, das von Nutzern geschrieben wurde, ist das nach wie vor ein Problem, das ihr selbst lösen müsst. Unabhängig davon wird heutzutage so viel
00:02:59Markdown generiert, dass dies für mich eine ziemlich gute Ergänzung zu sein scheint. Weiter geht's: Ihr
00:03:03könnt jetzt Node.pty deinstallieren. Bun.terminal bietet ein integriertes Pseudoterminal, mit dem ihr
00:03:08Bash, Vim oder HTOP aus JavaScript heraus steuern könnt. Wer schon mal versucht hat, ein Terminal in einer Electron-App auszuliefern,
00:03:12kennt diesen Schmerz. Dies ist eigentlich eine Erweiterung von Bun.spawn. Ihr übergeben die Terminal-Option und es
00:03:17startet einen Unterprozess mit einem angehängten Pseudoterminal. Der Unterprozess sieht ein echtes Terminal, was
00:03:22farbige Ausgaben, Cursor-Bewegungen und interaktive Eingabeaufforderungen ermöglicht. Und sobald ihr ein Terminal habt, könnt ihr
00:03:26Daten in dieses Terminal schreiben, die Größe des Terminals ändern, das Terminal schließen und vieles mehr. Ihr könnt außerdem
00:03:31einen eigenen Terminal erstellen, den Sie über Subprozesse hinweg wiederverwenden können. Ich erkenne ein Muster
00:03:35in all diesen Funktionen zu erkennen. Sie wirken wie etwas, das Claude Code verwenden würde, daher wünschte ich,
00:03:39sie würden das als Open Source veröffentlichen, damit wir sehen könnten, wie diese Features in großem Maßstab eingesetzt werden. Die nächste Dependency, die wir
00:03:43deinstallieren, ist Node.cron, da wir jetzt einfach Bun.cron verwenden können. Wenn ihr dem eine Funktion übergebt,
00:03:47läuft sie einfach in der Event-Loop ohne beteiligten System-Cron. Wenn ihr jedoch ein Skript übergebt,
00:03:51registriert dies einen Cronjob auf Betriebsebene – konkret Crontab unter Linux, launchd unter macOS
00:03:56und den Aufgabenplaner unter Windows. Ihr könnt die Standard-Cron-Syntax verwenden, einschließlich Wochentagen und Helfern wie
00:04:01daily, und es unterstützt auch das Parsen dieser Cron-Syntax, was das nächste passende Datum
00:04:05in der lokalen Zeitzone des Systems zurückgibt. Apropos Zeitzonen: Alle Jobs laufen standardmäßig in der Ortszeit,
00:04:11aber es gibt explizite Optionen, um dies zu ändern, sodass ihr genau wisst, wann etwas ausgeführt wird.
00:04:15Als Nächstes auf meinem Plan steht die Empfehlung, concurrently oder npm-run-all zu deinstallieren, denn Bun hat jetzt
00:04:20eine eigene parallele Option. Mit diesem Flag könnt ihr mehrere package.json-Skripte gleichzeitig ausführen,
00:04:24wobei der Ausgabe übersichtlich der Name des Skripts vorangestellt wird. Es erlaubt auch die Verwendung von Glob-Mustern
00:04:28für Skriptnamen, bietet einen Filter dafür, in welchen Paketen innerhalb eures Workspaces der Befehl ausgeführt
00:04:32werden soll, und enthält zudem eine Option, damit die anderen Skripte weiterlaufen, falls eines davon einen Fehler wirft. Außerdem
00:04:37muss es nicht nur parallel sein; ihr könnt auch sequential nutzen, um Skripte nacheinander auszuführen,
00:04:41mit demselben vorangestellten Präfix in der Ausgabe und denselben Filterfunktionen. Das ist wahrscheinlich das Feature, das ich
00:04:45am häufigsten nutzen werde. Unser nächstes Deinstallationsziel ist jegliche Tar-Archiv-Bibliothek. Bun.archive ist eine schnelle, native Implementierung
00:04:50von Tar und Gzip. Das Erstellen eines Archivs funktioniert über ein Objekt, bei dem die Schlüssel die Pfade und die Werte die
00:04:55Inhalte sind – und die Inhalte können alles sein: von einem String, Blob, Uint8Array bis hin zu einem ArrayBuffer. Für die Komprimierung
00:05:00könnt ihr auch die Option compress auf gzip setzen, mit einem Level von 1 bis 12. Natürlich lassen sich diese
00:05:05danach auch wieder extrahieren, mit Optionen wie einem Glob-Muster, um nur bestimmte Dateien zu entpacken. Ein Feature, das mir besonders
00:05:10gefällt, ist, dass ihr ein Archiv lesen könnt, ohne es zu extrahieren. Dieser Code hier kann lodash aus der NPM-
00:05:14Registry herunterladen und dessen package.json auslesen, ohne dass auch nur eine einzige Datei entpackt wird. Bisher haben wir den Bedarf
00:05:19an etwa 7 NPM-Paketen beseitigt, und es kommt noch mehr, auch wenn es sich hierbei um kleinere Features handelt, sodass wir
00:05:24schneller durchkommen. Erstens: Bun.serve kann jetzt statische Dateien ausliefern und ersetzt damit den Bedarf an
00:05:28serve-static, was großartig für den Public-Ordner eurer Website ist. Zweitens: Bun hat Unterstützung
00:05:33für JSON5 und XML hinzugefügt, sodass ihr deren Pakete nicht mehr benötigt. Ihr könnt beide Formate in Bun importieren, parsen und stringifizieren.
00:05:38Die letzten drei sind Helfer fürs Terminal: Wir haben Bun.sliceAnsi, Bun.wrapAnsi
00:05:43und Bun.stringWidth, die euch ein terminalspalten-bewusstes Schneiden, Umbrechen und Messen ermöglichen
00:05:47und damit Pakete wie slice-ansi, cli-truncate, wrap-ansi und string-width überflüssig machen.
00:05:52Insgesamt sind damit rund 15 Pakete verschwunden, und ich habe erst etwa die Hälfte dieses Releases abgedeckt.
00:05:56Das TL;DR dieses Blogbeitrags ist, dass vieles schneller geworden ist, die CPU-Auslastung sich verbessert hat, der Start
00:06:01beschleunigt wurde und das Binary trotz all dieser Funktionen um 17% kleiner geworden ist. Oh, und es ist in Rust geschrieben.
00:06:06Ein erwähnenswertes Bonus-Feature ist, dass Bun.install einen globalen virtuellen Store erhalten hat.
00:06:10Wenn ihr den isolierten Linker aktiviert, werden Pakete einmal auf eurem Rechner entpackt und per Symlink
00:06:14mit euren node_modules verknüpft, anstatt in jedes einzelne Projekt separat kopiert zu werden. Dies sollte
00:06:19das Ganze beschleunigen und außerdem Speicherplatz sparen, wenn man viele Projekte hat. Was denkt ihr also jetzt über Bun?
00:06:23Nutzt ihr es? Werdet ihr eines dieser Features verwenden? Lasst es mich in den Kommentaren wissen,
00:06:27moment mal, abonnieren nicht vergessen, und wie immer: Bis zum nächsten Mal.
00:06:36Wir sehen uns beim nächsten Mal.
커뮤니티 글
아직 글이 없습니다. 이 영상에 대한 첫 번째 글을 작성해 보세요!
이 영상에 대해 글쓰기