Auto cargar componentes con Vite

Inicial Vue Curso Vue en Escuela Vue

Es muy sencillo auto importar componentes en Vue 3. Si se trata de uno o dos componentes, el proceso se puede realizar “a mano”.

import { createApp } from 'vue';
import GlobalComponent from './GlobalComponent.vue';
const app = createApp({}) 
app.component('GlobalComponent', GlobalComponent);

Pero, ¿qué ocurre si queremos autoimportar un directorio entero?. Por ejemplo /components. Es aquí donde Vite y su Glob import vienen en nuestra ayuda. Vamos allá ⚡️

Componentes globales con Vite Glob import

Primero, podemos usar Glob import para seleccionar tos los archivos con extensión .vue.

const components = import.meta.globEager('./components/*.vue');

Esto resulta en un objeto con esta estructura:

{
	'./components/AppComponent.vue': Module,
	'./components/HelloWorld.vue': Module}
}

Como puedes ver como propiedad tenemos la ruta al componente y como valor, el propio módulo del componente en sí.

Ahora, podemos convertir components en Array con Object.entries y cargarlos con el método component de la recién creada instancia Vue.

Object.entries(components).forEach(([path, component]) => {
  myApp.component(
    path
      .split('/')
      .pop()
      .replace(/\.\w+$/, ''),
    component.default
  );
});

Fíjate que por el camino tenemos que hacer varias operaciones:

  • Romper el path en diferentes segmentos, separados por / con el método split de Array.
  • Quedarnos con el último segmento utilizando el método pop de Array.
  • Eliminar la extensión del segmento empleando el método replace de las strings y una expresión regular.

Con todo ello ya tenemos la posibilidad de auto cargar componentes globales en Vue 3 con Vite.

Así queda todo:

import { createApp } from 'vue';
import './style.css';
import App from './App.vue';

const components = import.meta.globEager('./components/*.vue');

const myApp = createApp(App);

Object.entries(components).forEach(([path, component]) => {
  myApp.component(
    path
      .split('/')
      .pop()
      .replace(/\.\w+$/, ''),
    component.default
  );
});

myApp.mount('#app');

Puedes probar el código en vivo aquí 🔥.

Código asociado
Curso Vue en Escuela Vue

¿Tienes alguna pregunta sobre Auto cargar componentes con Vite?

Resuelve todas tus dudas sobre Vue en la Comunidad de Escuela Vue: un lugar donde participar, aprender y ayudar. ¡Te esperamos!.

Tras el registro (si no lo has hecho ya) serás redirigido/a al canal adecuado en la Comunidad.

Twitter

Sigue el día a día y todo lo relacionado con Escuela Vue a través de su cuenta de Twitter.

Discord

En la Comunidad de Escuela Vue podrás solucionar tus dudas y ayudar a otras personas como tú a solucionar las suyas.

Recibe novedades en tu 📬