Sistema de Build
Sistema de Build Unificado
Seção intitulada “Sistema de Build Unificado”O Wails oferece um sistema de build unificado que compila código Go, empaceta ativos do frontend, embute tudo em um único executável e lida com builds específicos de plataforma — tudo com um único comando.
wails3 buildSaída: Executável nativo com tudo embutido.
Visão Geral do Processo de Build
Seção intitulada “Visão Geral do Processo de Build”[Espaço Reservado para Diagrama do Processo de Build]
Fases do Build
Seção intitulada “Fases do Build”1. Fase de Análise
Seção intitulada “1. Fase de Análise”O Wails analisa seu código Go para entender seus serviços:
type GreetService struct { prefix string}
func (g *GreetService) Greet(name string) string { return g.prefix + name + "!"}O que o Wails extrai:
- Nome do serviço:
GreetService - Nome do método:
Greet - Tipos de parâmetro:
string - Tipos de retorno:
string
Usado para: Gerar bindings de TypeScript
2. Fase de Geração
Seção intitulada “2. Fase de Geração”Bindings de TypeScript
Seção intitulada “Bindings de TypeScript”O Wails gera bindings com tipagem segura:
export function Greet(name: string): Promise<string> { return window.wails.Call('GreetService.Greet', name)}Benefícios:
- Segurança de tipos completa
- Autocompletar na IDE
- Erros em tempo de compilação
- Comentários JSDoc
Build do Frontend
Seção intitulada “Build do Frontend”Seu bundler de frontend é executado (Vite, webpack, etc.):
# Exemplo do Vitevite build --outDir distO que acontece:
- JavaScript/TypeScript compilado
- CSS processado e minificado
- Otimização de ativos
- Mapas de origem gerados (apenas dev)
- Saída para
frontend/dist/
3. Fase de Compilação
Seção intitulada “3. Fase de Compilação”Compilação Go
Seção intitulada “Compilação Go”O código Go é compilado com otimizações:
go build -ldflags="-s -w" -o myapp.exeFlags:
-s: Remove a tabela de símbolos-w: Remove informações de depuração DWARF- Resultado: Binário menor (~30% de redução)
Específico da plataforma:
- Windows:
.execom ícone embutido - macOS: Estrutura de bundle
.app - Linux: Binário ELF
Embutimento de Ativos
Seção intitulada “Embutimento de Ativos”Os ativos do frontend são embutidos no binário Go:
//go:embed frontend/distvar assets embed.FSResultado: Executável único com tudo dentro.
4. Saída
Seção intitulada “4. Saída”Único binário nativo:
- Windows:
myapp.exe(~15MB) - macOS:
myapp.app(~15MB) - Linux:
myapp(~15MB)
Sem dependências (exceto o WebView do sistema).
Desenvolvimento vs Produção
Seção intitulada “Desenvolvimento vs Produção”Otimizado para velocidade:
wails3 devO que acontece:
- Inicia o servidor de desenvolvimento do frontend (Vite na porta 5173)
- Compila o Go sem otimizações
- Inicia o aplicativo apontando para o servidor de desenvolvimento
- Habilita hot reload
- Inclui mapas de origem
Características:
- Recompilações rápidas (<1s para alterações no frontend)
- Sem embutimento de ativos (servidos pelo servidor de desenvolvimento)
- Símbolos de depuração incluídos
- Mapas de origem habilitados
- Logs verbosos
Tamanho do arquivo: Maior (~50MB com símbolos de depuração)
Otimizado para tamanho e desempenho:
wails3 buildO que acontece:
- Compila o frontend para produção (minificado)
- Compila o Go com otimizações
- Remove símbolos de depuração
- Embute os ativos
- Cria um binário único
Características:
- Código otimizado (minificado, tree-shaken)
- Ativos embutidos (sem arquivos externos)
- Símbolos de depuração removidos
- Sem mapas de origem
- Logs mínimos
Tamanho do arquivo: Menor (~15MB)
Comandos de Build
Seção intitulada “Comandos de Build”Build Básico
Seção intitulada “Build Básico”wails3 buildSaída: build/bin/myapp[.exe]
Build para Plataforma Específica
Seção intitulada “Build para Plataforma Específica”# Build para Windows (de qualquer OS)wails3 build -platform windows/amd64
# Build para macOSwails3 build -platform darwin/amd64wails3 build -platform darwin/arm64
# Build para Linuxwails3 build -platform linux/amd64Compilação cruzada: Compile para qualquer plataforma a partir de qualquer plataforma.
Build com Opções
Seção intitulada “Build com Opções”# Diretório de saída personalizadowails3 build -o ./dist/myapp
# Pular build do frontend (usar existente)wails3 build -skipbindings
# Build limpo (remover cache)wails3 build -clean
# Saída verbosawails3 build -vModos de Build
Seção intitulada “Modos de Build”# Build de depuração (inclui símbolos)wails3 build -debug
# Build de produção (padrão, otimizado)wails3 build
# Build de desenvolvimento (rápido, não otimizado)wails3 build -devbuildConfiguração de Build
Seção intitulada “Configuração de Build”Taskfile.yml
Seção intitulada “Taskfile.yml”O Wails usa Taskfile para configuração de build:
version: '3'
tasks: build: desc: Build the application cmds: - wails3 build
build:windows: desc: Build for Windows cmds: - wails3 build -platform windows/amd64
build:macos: desc: Build for macOS (Universal) cmds: - wails3 build -platform darwin/amd64 - wails3 build -platform darwin/arm64 - lipo -create -output build/bin/myapp.app build/bin/myapp-amd64.app build/bin/myapp-arm64.app
build:linux: desc: Build for Linux cmds: - wails3 build -platform linux/amd64Executar tarefas:
task build:windowstask build:macostask build:linuxArquivo de Opções de Build
Seção intitulada “Arquivo de Opções de Build”Crie build/build.json para configuração persistente:
{ "name": "My Application", "version": "1.0.0", "author": "Your Name", "description": "Application description", "icon": "build/appicon.png", "outputFilename": "myapp", "platforms": ["windows/amd64", "darwin/amd64", "linux/amd64"], "frontend": { "dir": "./frontend", "install": "npm install", "build": "npm run build", "dev": "npm run dev" }, "go": { "ldflags": "-s -w -X main.version={{.Version}}" }}Embutimento de Ativos
Seção intitulada “Embutimento de Ativos”Como Funciona
Seção intitulada “Como Funciona”O Wails usa o pacote embed do Go:
package main
import ( "embed" "github.com/wailsapp/wails/v3/pkg/application")
//go:embed frontend/distvar assets embed.FS
func main() { app := application.New(application.Options{ Name: "My App", Assets: application.AssetOptions{ Handler: application.AssetFileServerFS(assets), }, })
app.Window.New() app.Run()}No momento do build:
- Frontend construído em
frontend/dist/ - Diretiva
//go:embedinclui os arquivos - Arquivos compilados no binário
- Binário contém tudo
Em tempo de execução:
- App inicia
- Ativos servidos da memória
- Sem E/S de disco para ativos
- Carregamento rápido
Ativos Personalizados
Seção intitulada “Ativos Personalizados”Incorpore arquivos adicionais:
//go:embed frontend/distvar frontendAssets embed.FS
//go:embed data/*.jsonvar dataAssets embed.FS
//go:embed templates/*.htmlvar templateAssets embed.FSOtimizações de Build
Seção intitulada “Otimizações de Build”Otimizações de Frontend
Seção intitulada “Otimizações de Frontend”Vite (padrão):
export default { build: { minify: 'terser', terserOptions: { compress: { drop_console: true, // Remove console.log drop_debugger: true, }, }, rollupOptions: { output: { manualChunks: { vendor: ['react', 'react-dom'], // Separa bundle de vendor }, }, }, },}Resultados:
- JavaScript minificado (~70% de redução)
- CSS minificado (~60% de redução)
- Imagens otimizadas
- Tree-shaking aplicado
Otimizações Go
Seção intitulada “Otimizações Go”Flags do compilador:
-ldflags="-s -w"-s: Remove tabela de símbolos (~10% de redução)-w: Remove informações de depuração DWARF (~20% de redução)
Otimizações adicionais:
-ldflags="-s -w -X main.version=1.0.0"-X: Define valores de variáveis no momento do build- Útil para números de versão, datas de build
Compressão de Binário
Seção intitulada “Compressão de Binário”UPX (opcional):
# Após o buildupx --best build/bin/myapp.exeResultados:
- ~50% de redução de tamanhoDúvidas sobre builds? Pergunte no Discord ou verifique os exemplos de build.