Adiós a los archivos de distribución gigantes
Es ineficiente distribuir cientos de megabytes de binarios de Chromium cada vez que ejecutas una aplicación Electron. Para un desarrollador individual, el tamaño del archivo de distribución está directamente relacionado con la tasa de instalación. Deno Desktop utiliza la vista web nativa del sistema operativo. Puedes reducir una aplicación existente de 180 MB a 19 MB. No se trata solo de un cambio de tecnología, sino de aliviar el peso del entorno operativo.
Lista de control para el sprint de migración
Si quieres terminar la refactorización en 10 días, debes abandonar la estructura existente.
- Simplifica el sistema de gestión de caché usando
deno.locken lugar de las complejas dependencias depackage.json. - Elimina herramientas pesadas como
electron-builderyasar, y configura el motor de compilación interno de Deno. - Elimina las capas de comunicación
ipcMaineipcRenderery consolida el control del proceso con el métodowin.bind().
Al finalizar este trabajo, podrás reducir el tiempo del proceso de compilación en un 40%.
Controlar las diferencias de WebView por plataforma
Mac, Windows y Linux tienen motores web diferentes. WKWebView y WebView2 tienen resultados de renderizado distintos. Incluso la forma en que interpretan las especificaciones CSS es diferente. Especialmente el antiguo WebKitGTK de Linux rompe el diseño con frecuencia.
Para reducir la heterogeneidad entre plataformas, debes incluir scripts de corrección en tu canal de distribución (pipeline).
- Fuerza los márgenes predeterminados de todos los navegadores a 0 con código de reset CSS.
- Identifica el sistema operativo en ejecución llamando a
bindings.getPlatformMetadata()durante la fase de arranque (bootstrap). - En macOS, reserva un margen de 28px de altura con un div contenedor teniendo en cuenta el área del semáforo en modo sin marco (frameless), y en Windows, inyecta clases CSS según si se detecta o no el modo oscuro.
Al aplicar este enfoque, se reduce el coste de modificar la interfaz de usuario para cada sistema operativo.
Implementación de envoltorios de seguridad para llamadas a API nativas
Los canales IPC de Electron tienen accidentes de seguridad frecuentes. Deno Desktop aumenta la seguridad transmitiendo datos a través de enlaces directos (direct binding). Debes implementar tus propias clases envoltorio (wrapper) para controlar las funciones del SO de forma segura.
- Limita estrictamente la entrada y salida de archivos al interior de la ruta de sandbox
/app_sandbox_storage. - Incluye lógica de prevención de Path Traversal en el constructor de la clase para bloquear inmediatamente cualquier carácter
..en la ruta. - Al llamar a funciones del sistema como notificaciones, verifica que el recurso pasado como argumento esté en la lista blanca y utiliza solo datos codificados en base64.
Automatización de la distribución con GitHub Actions
No configures el entorno y compiles por separado para cada SO. Si utilizas la estrategia de matriz (matrix strategy) de GitHub Actions, puedes generar archivos msi para Windows, AppImage para Linux y dmg para Mac simultáneamente con un solo commit.
- Compila Windows y Linux en el entorno
ubuntu-latest, y los binarios de Mac enmacos-14. - Añade la opción
--compress=xzal comandodeno desktop --targetpara reducir el tamaño final del archivo. - Prueba si los resultados de Linux funcionan realmente en un entorno virtual ejecutando
xvfb-run.
Al construir este pipeline, tu ciclo de distribución será dos veces más rápido que con la compilación manual. La transición a Deno ofrece dos beneficios: binarios ligeros y seguridad mediante sandbox.
