Ao construir aplicativos React.js, gerenciar ícones SVG de forma eficiente é crucial. Os SVGs fornecem a escalabilidade e a flexibilidade necessárias para um design responsivo, mas lidar com eles em grandes projetos pode se tornar complicado. É aí que entra svg-path-constants, uma ferramenta CLI projetada para agilizar seu fluxo de trabalho SVG convertendo caminhos SVG em constantes reutilizáveis.
Em um artigo anterior, "Uma comparação abrangente de opções de gerenciamento de ícones SVG em projetos React.js", discuti vários métodos para gerenciar ícones SVG, incluindo SVGs inline, sprites SVG e o uso de componentes React para cada ícone. Embora cada método tenha seus prós e contras, resta um desafio: manter seus caminhos SVG organizados e reutilizáveis.
O uso de constantes para caminhos SVG fornece tamanho de pacote pequeno e tempo de construção rápido.
svg-path-constants é uma ferramenta CLI que ajuda a gerar constantes a partir de arquivos SVG, facilitando a integração e o gerenciamento de ícones SVG em seus projetos React. Ele converte caminhos SVG em constantes JS, oferece suporte a convenções de nomenclatura flexíveis e permite saída personalizável.
Você pode começar a usar svg-path-constants imediatamente com npx:
npx svg-path-constants@latest
Como alternativa, você pode instalá-lo globalmente ou como uma dependência de desenvolvimento:
npm install -g svg-path-constants npm install --save-dev svg-path-constants
Digamos que você tenha arquivos SVG em src/assets/icons e queira gerar constantes em src/components/Icon/paths.js:
npx svg-path-constants@latest -i src/assets/icons -o src/components/Icon/paths.js
Exemplo de saída:
// src/components/Icon/paths.js export const folderIcon1 = "M10 10 H 90 V 90 H 10 Z"; // Example SVG path export const folderIcon2 = "M20 20 H 80 V 80 H 20 Z"; // Example SVG path
Especifique um formato de nomenclatura diferente, como PascalCase:
npx svg-path-constants@latest -i src/assets/icons -o src/components/Icon/paths.js -f PascalCase
Exemplo de saída:
// src/components/Icon/paths.js export const FolderIcon1 = "M10 10 H 90 V 90 H 10 Z"; // Example SVG path export const FolderIcon2 = "M20 20 H 80 V 80 H 20 Z"; // Example SVG path
Controle a nomenclatura e a saída do arquivo com um modelo personalizado:
npx svg-path-constants@latest -i src/assets/icons -o src/components/Icon/{-2,-1}/{0}.js -t "{1,-3}"
Exemplo de saída:
// src/components/Icon/folder/icon1.js export const folderIcon1 = "M10 10 H 90 V 90 H 10 Z"; // Example SVG path // src/components/Icon/folder/icon2.js export const folderIcon2 = "M20 20 H 80 V 80 H 20 Z"; // Example SVG path
svg-path-constants podem converter atributos SVG como opacidade, opacidade de preenchimento, traço e preenchimento em componentes da string do caminho.
Constante de caminho gerada:
export const myIcon = "o0.5 O0.8 fff000 F00ff00 M10 10 H 90 V 90 H 10 Z";
Este recurso permite manter informações essenciais de estilo diretamente na string do caminho, mantendo uma representação compacta e informativa.
Depois de gerar constantes de caminho SVG com svg-path-constants, você pode integrá-las facilmente em seus componentes React. Isso não apenas mantém seu código limpo, mas também permite a fácil reutilização de caminhos SVG em seu aplicativo.
Vamos supor que você já tenha executado o seguinte comando para gerar constantes a partir de seus arquivos SVG:
npx svg-path-constants@latest -i src/assets/icons -o src/components/Icon/paths.js
Este comando gera um arquivo src/components/Icon/paths.js com constantes como:
// src/components/Icon/paths.js export const folderIcon1 = "M10 10 H 90 V 90 H 10 Z"; // Example SVG path export const folderIcon2 = "M20 20 H 80 V 80 H 20 Z"; // Example SVG path
Agora, vamos criar um componente React que renderiza esses ícones SVG usando as constantes geradas.
import React from 'react'; import { folderIcon1, folderIcon2 } from './paths'; // Import the generated SVG path constants const parsePathData = (d) => { const pathElements = []; const pathCommands = d.split(/(o[\d.] |O[\d.] |f[0-9a-fA-F] |F[0-9a-fA-F] )/); // Split by style commands let attributes = null; pathCommands.forEach((text, i) => { const isCommand = Boolean(i % 2); if (isCommand) { if (!attributes) { attributes = {}; } const match = text.match(/^(o([\d.] ))?(O([\d.] ))?(f([0-9a-fA-F] ))?(F([0-9a-fA-F] ))?$/); const [, , opacity, , fillOpacity, , stroke, , fill] = match; if (opacity) attributes.opacity = opacity; if (fillOpacity) attributes["fill-opacity"] = fillOpacity; if (stroke) attributes.stroke = `#${stroke}`; if (fill) attributes.fill = `#${fill}`; return; } if (text.trim().length) { pathElements.push({ ...attributes, d: text }); } }); return pathElements; }; const SvgIcon = ({ d, size = 24, color = 'currentColor', ...props }) => { const pathElements = parsePathData(d); return ( ); }; const IconDemo = () => (); export default IconDemo;SVG Icon Examples
Folder Icon 1
Folder Icon 2
Agora você pode usar o componente IconDemo em qualquer lugar do seu aplicativo React para exibir os ícones SVG:
import React from 'react'; import ReactDOM from 'react-dom'; import IconDemo from './components/Icon/IconDemo'; ReactDOM.render(, document.getElementById('root') );
função parsePathData:
Componente SvgIcon:
Componente IconDemo:
Atualmente estou trabalhando em uma biblioteca npm que irá aprimorar as constantes de caminho svg adicionando imagens raster (PNGs) como comentários acima de cada constante gerada. Isso fornecerá uma representação visual do ícone diretamente no seu código, facilitando a identificação e o gerenciamento de caminhos SVG.
Gerenciar caminhos SVG em projetos React não precisa ser um incômodo. Com svg-path-constants, você pode manter seus ícones organizados, seu código limpo e seu fluxo de trabalho eficiente. E em breve, com a próxima biblioteca para adicionar imagens raster a comentários de ícones, você terá uma maneira ainda mais visual e intuitiva de gerenciar seus ativos SVG.
Experimente svg-path-constants hoje:
npx svg-path-constants@latest
E fique ligado para mais atualizações!
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3