1. Início
  2. Histórias
  3. Migrar uma folha de sprites

História — engenharia frontend

Migrando uma folha de sprites legada que ninguém conseguia reconstruir

“A gente estava migrando para componentes de ícone individuais. O detalhe: os ícones atuais eram um único sprite SVG, referenciado por toda parte com <use>, e o passo de build que o gerava tinha sido apagado duas refatorações atrás. A gente tinha o sprite em produção e nada que o fabricasse.”

O cenário

O sprite funcionava bem — ele só não podia ser desmontado

Quem
Priya, engenheira frontend liderando uma migração de componentes num app web de longa data.
Stack
React + TypeScript, Vite, um pipeline SVGR para os ícones novos. Os ícones antigos moravam num único sprite.svg com defs <symbol>.
O trabalho
Transformar uns 30 símbolos de sprite em arquivos .svg individuais para passar pelo SVGR e publicar como componentes tipados.
A parede
Cada ícone na tela era um ponteiro <use href="#icon-x">. Salvar o ponteiro não dá nada. O gerador tinha sumido.

O que não estava funcionando

“Baixar o próprio arquivo de sprite te dá um documento grande cheio de elementos <symbol> sem viewBox por fora e sem jeito de renderizar um sozinho. Comecei a dividir na mão num editor — copiar um símbolo, envolver num <svg> novo, portar o viewBox do symbol, torcer para ter pegado o certo. É trabalhoso e é exatamente o tipo de coisa em que você comete um erro silencioso.”

A indireção do <use> é precisamente o que torna sprites eficientes no navegador e dolorosos de extrair. O ícone renderizado é real; o que você consegue agarrar é uma referência a um fragmento.

A virada

Priya rodou o SVG Downloader numa página que usava os ícones. Em vez de entregar os ponteiros <use>, ele resolveu cada referência de sprite do mesmo documento de volta à geometria do <symbol> subjacente e a reconstruiu como SVG independente e renderizável — viewBox intacto, namespace consertado.

detectar → zip
A rodada completa: detectar o conjunto, percorrer para confirmar que cada símbolo resolveu direito, e então Baixar tudo em ZIP — sem duplicatas e numerado.

“As prévias foram a checagem de confiança. Percorri e cada símbolo estava lá, renderizando sozinho — não uma referência quebrada, o ícone de verdade. Depois Baixar tudo em ZIP me deu o conjunto inteiro, sem duplicatas, então os ícones que apareciam cinco vezes na página não desceram cinco vezes. Descompactei direto em src/icons/ e rodei o SVGR na pasta.”

“O sprite era o único ativo da migração inteira que a gente achava que precisaria de uma reconstrução manual. Virou um passo de importação. O resto do dia foi para o trabalho de React de verdade.”

Priya Nandakumar, engenheira frontend

O resultado

  • ~30 símbolosresolvidos de <use> para SVG independente num ZIP
  • Sem duplicatasícones usados muitas vezes na página desceram uma vez
  • Pronto para SVGRviewBox correto e xmlns, direto para o pipeline
O que fez o trabalho
O extrator de sprites / <use> para resolver as referências, e então Baixar tudo em ZIP para o conjunto inteiro de uma vez.
Por que o sprite cru falha
Um sprite.svg baixado é um saco de defs <symbol> sem renderização independente — dividir na mão perde viewBoxes e convida a erros de transcrição. Veja baixar tudo em ZIP.
Escopo
Resolve referências de sprite do mesmo documento. Arquivos de sprite externos que a página nunca carrega no DOM não são alcançáveis — abra uma página que realmente use os ícones.

História composta — um fluxo ilustrativo, mas representativo. A pessoa e o time são fictícios; o comportamento da extensão descrito aqui é real. Mais histórias →


Resolva o sprite, pule a reconstrução

Transforme referências <use> de volta em SVG independente e renderizável — o conjunto todo num ZIP.