Usando iconos FontAwesome con Nuxt 3
por Jorge, 25-Mar-2023
FontAwesome proporciona más de 2,000 iconos gratuitos para usar en tus proyectos. Aquí te explicamos cómo comenzar a usarlos en tu aplicación Nuxt 3, incluyendo cómo mejorar el rendimiento importando solo los iconos que necesitas.
Esta es la misma configuración que uso en mi propio sitio web, y puedes ver el código fuente completo en el repositorio de GitHub aquí.
Instalación
Ejecuta el siguiente comando para agregar el componente vue-fontawesome.
npm i --save @fortawesome/vue-fontawesome@latest-3
También necesitarás instalar el paquete de iconos que deseas utilizar. Para mi proyecto, agregué los paquetes svg-core y free-brands-svg-icons.
npm i --save @fortawesome/fontawesome-svg-core
npm i --save @fortawesome/free-brands-svg-icons
Después de la instalación, las dependencias en el archivo package.json se verán así:
"dependencies": {
"@fortawesome/fontawesome-svg-core": "^6.2.1",
"@fortawesome/free-brands-svg-icons": "^6.2.1",
"@fortawesome/vue-fontawesome": "^3.0.2"
}
Configuración
Para usar los iconos de FontAwesome en Nuxt 3, deberás agregar lo siguiente al arreglo css en tu archivo nuxt.config.
css: [
'@fortawesome/fontawesome-svg-core/styles.css'
]
Luego, crea un directorio de plugins en la raíz de tu aplicación Nuxt 3 y crea un archivo fontawesome.js dentro.
Este archivo es donde registraremos los iconos en nuestra librería y agregaremos el componente
Subconjuntos para mejorar el rendimiento
Si solo estás usando algunos iconos, puedes subconjuntar qué iconos se agregan a la librería para mejorar el rendimiento. En este ejemplo, solo estoy usando los iconos TwitteSquare, Twitch y GitHubSquare, por lo que no hay necesidad de instalar toda la librería.
En mi archivo fontawesome.js a continuación, solo estoy importando los iconos que necesito de @fortawesome/free-brands-svg-icons, luego pasando esos valores a través de library.add().
import { library, config } from '@fortawesome/fontawesome-svg-core'
import { FontAwesomeIcon } from '@fortawesome/vue-fontawesome'
import { faTwitterSquare, faTwitch, faGithubSquare } from '@fortawesome/free-brands-svg-icons'
library.add(faTwitterSquare, faTwitch, faGithubSquare)
// Esto es importante, vamos a dejar que Nuxt se encargue del CSS
config.autoAddCss = false
export default defineNuxtPlugin((nuxtApp) => {
nuxtApp.vueApp.component('font-awesome-icon', FontAwesomeIcon, {})
})
Luego, agrego el componente FontAwesomeIcon y lo registro como
Si deseas importar toda la librería de iconos, importarías y pasarías el nombre completo de la librería, así:
// ...
import { fab } from '@fortawesome/free-brands-svg-icons'
library.add(fab)
// ...
Usando los iconos
Ahora puedes usar el componente
<font-awesome-icon icon="fa-brands fa-twitter-square" />
<font-awesome-icon icon="fa-brands fa-youtube-square" />
<font-awesome-icon icon="fa-brands fa-github-square" />
Si deseas usar valores dinámicos, pasa la librería y el nombre del icono como un array al atributo
<template>
<div id="icons">
<a v-for="link in socialLinks" :key="link.name" :href="link.url" target="blank">
<font-awesome-icon :icon="['fab', link.icon]" />
</a>
</div>
</template>
<script setup>
const socialLinks = [
{
name: 'Twitter',
url: 'https://twitter.com/ceceliacreates',
icon: 'twitter-square'
},
{
name: 'Youtube',
url: 'https://www.youtube.com/@ceceliacreates',
icon: 'youtube-square'
},
{
name: 'GitHub',
url: 'https://github.com/ceceliacreates',
icon: 'github-square'
}
]
</script>
Recursos
Eso debería ser suficiente para que empieces, pero aquí hay enlaces a más documentación sobre FontAwesome con Nuxt y Subsetting.