Deno-Migration zur Reduzierung der Build-Größe von Electron-Apps

Computing/Software4분 읽기

TuBrief 편집팀 원본 영상을 바탕으로 AI의 도움을 받아 작성했습니다. 원본 영상이 기준입니다. 원본 영상: Deno Desktop kann deine Apps um 70 % verkleinern · Better Stack

Abschied von riesigen Deployment-Dateien

Es ist ineffizient, bei jeder Ausführung einer Electron-App ein hunderte Megabyte großes Chromium-Binary mit auszuliefern. Für Solo-Entwickler steht die Größe der Installationsdatei in direktem Zusammenhang mit der Installationsrate. Deno Desktop verwendet die native Webview des Betriebssystems. Damit lässt sich eine bestehende 180-MB-App auf etwa 19 MB reduzieren. Das ist nicht nur eine einfache technologische Änderung, sondern ein Vorgang, der das Gewicht der Betriebsumgebung spürbar reduziert.

Migrations-Sprint-Checkliste

Um das Refactoring in 10 Tagen abzuschließen, muss die bestehende Struktur verworfen werden.

  • Anstatt der komplexen Abhängigkeiten in package.json wird deno.lock verwendet, um das Cache-Management zu vereinfachen.
  • Schwere Tools wie electron-builder und asar werden entfernt und durch die interne Deno-Build-Engine ersetzt.
  • Die Kommunikations-Layer ipcMain und ipcRenderer werden gelöscht und die Prozesskontrolle mit der Methode win.bind() vereinheitlicht.

Sobald dieser Prozess abgeschlossen ist, lässt sich die Zeit des Build-Prozesses um 40 % verkürzen.

Kontrolle plattformspezifischer Webview-Unterschiede

Mac, Windows und Linux verwenden unterschiedliche Web-Engines. WKWebView und WebView2 liefern unterschiedliche Rendering-Ergebnisse. Selbst die Art und Weise, wie CSS-Spezifikationen interpretiert werden, unterscheidet sich. Insbesondere das veraltete WebKitGTK unter Linux zerstört häufig das Layout.

Um die Diskrepanzen zwischen den Plattformen zu verringern, sollten Korrektur-Skripte in die Deployment-Pipeline integriert werden.

  1. Mit CSS-Reset-Code werden die Standardabstände aller Browser auf 0 erzwungen.
  2. In der Bootstrap-Phase wird bindings.getPlatformMetadata() aufgerufen, um das laufende Betriebssystem zu identifizieren.
  3. Unter macOS wird im Frameless-Modus ein 28px hoher Wrapper-Div für den Bereich der Ampelsymbole reserviert, während unter Windows je nach Erkennung des Dark-Mode eine CSS-Klasse injiziert wird.

Durch diese Vorgehensweise sinkt der Aufwand, die UI für jedes Betriebssystem einzeln anpassen zu müssen.

Implementierung von Sicherheits-Wrappern für native API-Aufrufe

Die IPC-Kanäle von Electron sind anfällig für Sicherheitsvorfälle. Deno Desktop erhöht die Sicherheit durch die Übertragung von Daten über direkte Bindings. Um OS-Funktionen sicher zu steuern, müssen Wrapper-Klassen eigenständig implementiert werden.

  • Datei-I/O muss zwingend auf den Sandbox-Pfad /app_sandbox_storage beschränkt werden.
  • Der Klassenkonstruktor sollte eine Logik zur Verhinderung von Path Traversal enthalten, die ".."-Zeichen in Pfaden sofort blockiert.
  • Beim Aufruf von Systemfunktionen wie Benachrichtigungen sollte überprüft werden, ob die übergebenen Ressourcen auf einer Whitelist stehen; es sollten ausschließlich base64-kodierte Daten verwendet werden.

Automatisierung des Deployments mit GitHub Actions

Konfiguriere und baue die Umgebung nicht für jedes OS einzeln. Durch die Matrix-Strategie von GitHub Actions lassen sich mit einem einzigen Commit gleichzeitig Windows-MSI-, Linux-AppImage- und Mac-DMG-Dateien erstellen.

  • In der Umgebung ubuntu-latest werden Windows und Linux, in macos-14 das Mac-Binary erstellt.
  • Der Befehl deno desktop --target wird um die Option --compress=xz ergänzt, um die finale Dateigröße zu reduzieren.
  • Die Linux-Ergebnisse werden mit einem xvfb-run-Aufruf in einer virtuellen Umgebung auf ihre tatsächliche Funktionsfähigkeit getestet.

Der Aufbau dieser Pipeline beschleunigt den Deployment-Zyklus im Vergleich zum manuellen Build um das Zweifache. Die Umstellung auf Deno bietet zweierlei Vorteile: leichtere Binaries und Sandbox-Sicherheit.

관련 영상

Deno Desktop kann deine Apps um 70 % verkleinern

Better Stack6:17

커뮤니티의 다른 글

댓글

로그인하고 댓글을 남겨 보세요.

아직 댓글이 없습니다.