Max Andy Diaz Neyra
Aldo Said Salas Rodríguez
La importación global nos permite importar archivos de forma masiva, es decir, poder tomar toda una carpeta e importarla de una sola vez para usarla dentro del código.
Creando los módulos
Primero que todo debemos crear los archivos que queremos importar, en este ejemplo crearé una carpeta con el nombre modules y dentro de esta dos archivos, module1.js y module2.js.
Los archivos tendrán un objeto que tendrá la propiedad nombre y esta será igual al nombre del módulo, después exportaremos una función (load) la cual imprimirá un mensaje con el nombre del módulo y por último exportaremos el objeto.
module1.js
const module = { name: "module 1", }; export function load() { console.log(`${module.name} load!`); } export default module;
module2.js
const module = { name: "module 2", }; export function load() { console.log(`${module.name} load!`); } export default module;
Global import
Ahora que tenemos los archivos de ejemplo debemos de importarlos, para esto debemos de usar la función de global import y guardarlo en una variable, de la siguiente manera:
const modules = import.meta.glob("./modules/*.js");
Como puedes ver en la constante modules estamos utilizando el import especial (import.meta.blog()) y dentro de esta indicamos en que carpeta se realizara el import (./modules) y a continuación qué archivos se traerán, en este caso estamos trayendo todos los que terminen con la extensión .js (/*.js).
Usando nuestros módulos
Si imprimimos modules veremos que estamos importando un JSON que contiene los diferentes módulos, es por esto que podemos iterarlo con un for In y ejecutar las funciones load que tiene cada archivo.
for (const path in modules) {}for (const path in modules) { modules[path]().then((module) => { module.load(); }); } // module 1 load! // module 2 load!
Contribución creada por: Jofay Zhan Segura
Max Andy Diaz Neyra
Aldo Said Salas Rodríguez
Christian Rafael Rafael Guado Geronimo
Diana Martinez
Christian Rafael Rafael Guado Geronimo
Santiago Andres Alvarez Cuadros
Christian David Osorio Chacón
Bulmaro Arellano Navarrete
Carmine Maggio
Fidel Parabacuto
Kenneth Angulo L
JOSE MARIA SUAREZ GIESE
Jefred Bedoya
George M
Diana Martinez
milton coronado
Diana Martinez
Diego Reyes Cabrera
Diana Martinez
Henry Alexander Velásquez Rosas
Oscar Alvarado
Aqui el ejemplo de la clase trabajado con async await :
const modules = import.meta.glob('./modules/*.js'); for(const path in modules){ async function fetchModule(){ const module = await modules[path](); module.load(); } fetchModule(); // modules[path]().then((module)=>{ // module.load(); // }) } console.info(modules);
Y gracias a los top-level await podemos hacerlo de la siguiente forma:
const modules = import.meta.glob('./modules/*.js') for (const path in modules) { const module = await modules[path]() module.load() }
Alguien me podria explicar porque cuando pongo el asterisco en el siguiente codigo:
const modules = import.meta.glob("./modules/*.js")
el resto del codigo se vuelve gris?
Puede ser un error con el linter de VS Code, no me pasa, pero podrías revisar que estén bien las comillas y todo.
Ya descubri el error, solo tenia que desinstalar la extension Babel javascript de VSCode.
Si observamos el código JS que Vite nos arroja en el navegador cuando ejecutamos el servidor de desarrollo, podemos ver que:
const modules = import.meta.glob('../modules/*.ts');
Sería como hacer en JS:
const modules = Object.assign({ "../modules/module1.ts": ()=>import("/modules/module1.ts"), "../modules/module2.ts": ()=>import("/modules/module2.ts") });
Esto me permitió entender mucho mejor qué es lo que está pasando porque la verdad nunca había visto ni trabajado con dynamic imports, y puede que a alguien más también le ayude a entender mejor.
.
En resumen, Vite está creando importaciones dinámicas de todos los archivos que le especificamos como argumento de glob(), creando un objeto module cuyos keys son iguales a un import estático y los values son iguales al key pero en un import dinámico.
Hola! alguien sabe cuál es la mejor manera de importar jquery en un proyecto de vite?
Hola Cristian,
jQuery es pasado, no deberías ni pensar en él, ¿Como para qué? Es mi opinión, aunque me gustaría saber si algún compañero sabe o tiene una mejor respuesta. Saludos
Instálalo como un paquete y lo importas como cualquier otro
Está bueno porque podemos importar archivos de forma masiva utilizando JS, para no tener que importar cada elemento por separado
¿Cuándo debo usar la importación global?
El mejor momento para usarla es cuando tienes colecciones dinámicas de archivos que comparten un propósito común. Un caso clásico es la creación de un blog: si tienes decenas de artículos escritos en formato Markdown (.md), usar importación global te permite cargarlos todos de golpe para generar tu lista de posts sin tener que actualizar un archivo central de importaciones cada vez que escribes uno nuevo. También es increíblemente útil para registrar componentes base en frameworks como Vue o React, cargar traducciones de múltiples archivos JSON para internacionalización (i18n), o construir sistemas de enrutamiento basados en el sistema de archivos. Si te encuentras copiando y pegando líneas de import solo cambiando el nombre del archivo, es la señal perfecta para usar esta herramienta.
Volveré a ver el curso, no entiendo nada de lo que está pasando :) no es por la explicación, todo fué bastante claro, es algo personal.
La importación global en Vite permite gestionar recursos de forma centralizada, optimizando el flujo de trabajo. Se trata de abstracción eficiente frente a la carga manual.
Pilares de la Importación
y da lo mismo que en el export de los módulos ambos se llamen igual?
Pues, si no vas a ocupar el nombre y no va a haber conflictos, adelante, recuerda que al final esto es JavaScript y aplican las mismas reglas.
hay alguna otra forma de llamar a los archivos /*.js ya que la barra mas el asterisco hace que el codigo se convierta en comentario
 { const fn = async () => { const mod = await modules[path](); mod.load(); }; fn(); }