Al crear aplicaciones React.js, administrar los íconos SVG de manera eficiente es crucial. Los SVG brindan la escalabilidad y flexibilidad necesarias para el diseño responsivo, pero manejarlos en proyectos grandes puede resultar engorroso. Ahí es donde entra en juego svg-path-constants, una herramienta CLI diseñada para optimizar su flujo de trabajo SVG al convertir rutas SVG en constantes reutilizables.
En un artículo anterior, "Una comparación completa de las opciones de administración de íconos SVG en proyectos React.js", analicé varios métodos para administrar íconos SVG, incluidos SVG en línea, sprites SVG y el uso de componentes de React para cada ícono. Si bien cada método tiene sus pros y sus contras, aún queda un desafío: mantener tus rutas SVG organizadas y reutilizables.
El uso de constantes para rutas SVG proporciona un tamaño de paquete pequeño y un tiempo de compilación rápido.
svg-path-constants es una herramienta CLI que te ayuda a generar constantes a partir de archivos SVG, lo que facilita la integración y administración de íconos SVG en tus proyectos de React. Convierte rutas SVG en constantes JS, admite convenciones de nomenclatura flexibles y permite resultados personalizables.
Puedes comenzar a usar svg-path-constants inmediatamente con npx:
npx svg-path-constants@latest
Alternativamente, puedes instalarlo globalmente o como una dependencia de desarrollo:
npm install -g svg-path-constants npm install --save-dev svg-path-constants
Supongamos que tiene archivos SVG en src/assets/icons y desea generar constantes en src/components/Icon/paths.js:
npx svg-path-constants@latest -i src/assets/icons -o src/components/Icon/paths.js
Ejemplo de salida:
// 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 un formato de nombre diferente, como PascalCase:
npx svg-path-constants@latest -i src/assets/icons -o src/components/Icon/paths.js -f PascalCase
Ejemplo de salida:
// 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 el nombre y la salida del archivo con una plantilla personalizada:
npx svg-path-constants@latest -i src/assets/icons -o src/components/Icon/{-2,-1}/{0}.js -t "{1,-3}"
Ejemplo de salida:
// 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 puede convertir atributos SVG como opacidad, opacidad de relleno, trazo y relleno en componentes de la cadena de ruta.
Constante de ruta generada:
export const myIcon = "o0.5 O0.8 fff000 F00ff00 M10 10 H 90 V 90 H 10 Z";
Esta función le permite mantener información de estilo esencial directamente dentro de la cadena de ruta, manteniendo una representación compacta e informativa.
Una vez que haya generado constantes de ruta SVG con svg-path-constants, puede integrarlas fácilmente en sus componentes de React. Esto no solo mantiene su código limpio sino que también permite una fácil reutilización de rutas SVG en su aplicación.
Supongamos que ya ha ejecutado el siguiente comando para generar constantes a partir de sus archivos SVG:
npx svg-path-constants@latest -i src/assets/icons -o src/components/Icon/paths.js
Este comando genera un archivo src/components/Icon/paths.js con 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
Ahora, creemos un componente de React que represente estos íconos SVG usando las constantes generadas.
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
Ahora puedes usar el componente IconDemo en cualquier lugar de tu aplicación React para mostrar los íconos SVG:
import React from 'react'; import ReactDOM from 'react-dom'; import IconDemo from './components/Icon/IconDemo'; ReactDOM.render(, document.getElementById('root') );
Función parsePathData:
Componente SVGIcon:
Componente de demostración de iconos:
Actualmente estoy trabajando en una biblioteca npm que mejorará las constantes de ruta svg agregando imágenes rasterizadas (PNG) como comentarios encima de cada constante generada. Esto proporcionará una representación visual del ícono directamente en su código, lo que facilitará la identificación y administración de rutas SVG.
Administrar rutas SVG en proyectos de React no tiene por qué ser una molestia. Con svg-path-constants, puede mantener sus íconos organizados, su código limpio y su flujo de trabajo eficiente. Y pronto, con la próxima biblioteca para agregar imágenes rasterizadas a comentarios de íconos, tendrás una forma aún más visual e intuitiva de administrar tus recursos SVG.
Pruebe svg-path-constants hoy:
npx svg-path-constants@latest
¡Y estad atentos para más actualizaciones!
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3