Adeus aos arquivos de distribuição gigantes
Distribuir centenas de megabytes de binários do Chromium cada vez que um aplicativo Electron é executado é ineficiente. Para um desenvolvedor solo, o tamanho do arquivo de distribuição está diretamente ligado à taxa de instalação. O Deno Desktop utiliza a webview nativa do sistema operacional. É possível reduzir um aplicativo de 180MB para o nível de 19MB. Não se trata apenas de uma mudança técnica, mas de um trabalho para aliviar o peso do ambiente operacional.
Checklist do sprint de migração
Para finalizar a refatoração em 10 dias, é preciso abandonar a estrutura existente.
- Em vez de dependências complexas no package.json, use deno.lock para simplificar o sistema de gerenciamento de cache.
- Remova ferramentas pesadas como electron-builder e asar, e configure o mecanismo de compilação interno do Deno.
- Exclua as camadas de comunicação ipcMain e ipcRenderer e consolide o controle do processo com o método win.bind().
Ao concluir este trabalho, você pode reduzir o tempo do processo de compilação em 40%.
Controlando as diferenças de webview por plataforma
Mac, Windows e Linux possuem mecanismos web diferentes. WKWebView e WebView2 apresentam resultados de renderização distintos. Até mesmo a forma de interpretar a especificação CSS é diferente. Especialmente o antigo WebKitGTK do Linux frequentemente quebra o layout.
Para reduzir a sensação de inconsistência entre plataformas, é necessário inserir scripts de correção no pipeline de distribuição.
- Force as margens padrão de todos os navegadores para 0 com um código de reset CSS.
- No estágio de bootstrap, chame bindings.getPlatformMetadata() para determinar o sistema operacional em execução.
- No macOS, ao usar o modo sem bordas (frameless), reserve uma margem de 28px de altura com uma div envolvente para acomodar a área dos semáforos, e no Windows, injete classes CSS dependendo da detecção do modo escuro.
A aplicação deste método reduz o custo de modificar a UI manualmente para cada sistema operacional.
Implementação de wrappers de segurança para chamadas de API nativa
Os canais IPC do Electron sofrem com incidentes de segurança frequentes. O Deno Desktop aumenta a segurança ao transmitir dados via vinculação direta (direct binding). Para controlar as funções do SO com segurança, é necessário implementar classes wrapper manualmente.
- A entrada e saída de arquivos deve ser restrita ao caminho em sandbox /app_sandbox_storage.
- Inclua lógica de prevenção de Path Traversal no construtor da classe para bloquear imediatamente caracteres .. no caminho.
- Ao chamar funções do sistema, como notificações, verifique se o recurso passado como argumento está na whitelist e use apenas dados codificados em base64.
Automação de distribuição com GitHub Actions
Não configure e compile ambientes para cada SO separadamente. Ao usar a estratégia de matriz (matrix strategy) do GitHub Actions, você pode extrair arquivos msi para Windows, AppImage para Linux e dmg para Mac simultaneamente com um único commit.
- Compile Windows e Linux no ambiente ubuntu-latest, e binários para Mac no macos-14.
- Adicione a opção --compress=xz ao comando deno desktop --target para reduzir o tamanho final do arquivo.
- Para os resultados do Linux, execute um teste de funcionamento real em ambiente virtual usando xvfb-run.
A construção deste pipeline torna o ciclo de distribuição duas vezes mais rápido do que a compilação manual. A transição para o Deno traz dois benefícios: binários leves e segurança em sandbox.
