¿Cómo optimizar fuentes externas integrándolas al proyecto?
Cuando trabajamos con fuentes externas, como las de Google Fonts, es común que nuestros proyectos se vuelvan más pesados por los llamados que se realizan a estas fuentes. Una excelente práctica de optimización consiste en integrar estas fuentes de manera local dentro del proyecto. Esto garantiza un rendimiento mejorado y una carga más rápida. Aquí te explicamos cómo hacerlo utilizando webpack.
¿Cómo identificar y descargar la fuente?
El primer paso es identificar qué fuentes estás utilizando actualmente. En muchos proyectos, las fuentes se gestionan desde la hoja de estilos principal. Por ejemplo, si estás importando la fuente "Ubuntu" de Google Fonts en tu archivo CSS, es momento de descargarla para incorporarla localmente. Si bien Google Fonts permite la descarga de fuentes, es necesario obtenerlas en formato optimizado para la web, como .woff o .woff2.
Para facilitar este proceso, hay herramientas en línea donde puedes seleccionar y descargar fuentes en el formato deseado. Una opción puede ser usar un generador de fuentes web que permita la descarga en los formatos requeridos.
¿Cómo integrar las fuentes localmente con font-face?
Una vez descargada la fuente, es momento de integrarla al proyecto. Crea una carpeta fonts dentro de tu directorio assets y coloca ahí las fuentes descargadas. Luego, en tu archivo CSS, utiliza la regla @font-face para definir la fuente localmente.
Con esta configuración, estás indicando al navegador que utilice las fuentes locales en lugar de recurrir a servidores externos. Esto no solo mejora la velocidad de carga, sino también la consistencia del proyecto.
¿Cómo configurar webpack para copiar fuentes?
Una vez que tus fuentes están integradas localmente, el siguiente paso es asegurarte de que se incluyan correctamente en la carpeta de distribución al momento de compilar el proyecto con webpack. Para esto, necesitas configurar webpack para que maneje las fuentes de la misma manera que las imágenes.
Primero, instala los loaders necesarios:
npminstall url-loader file-loader --save-dev
Luego, añade la siguiente configuración a tu archivo webpack:
module.exports={module:{rules:[// Otras reglas{test:/\.(woff|woff2)$/,use:{loader:'url-loader',options:{limit:10000,mimetype:'application/font-woff',name:'[name].[ext]',outputPath:'assets/fonts/',publicPath:'assets/fonts/',esModule:false}}}]}};
Con estas reglas, le indicas a webpack cómo manejar y procesar los archivos de fuentes, asegurando que se copien a la ubicación correcta en la carpeta de distribución.
¿Cómo verificar la integración exitosa?
Finalmente, después de configurar y compilar el proyecto, es crucial verificar que las nuevas configuraciones funcionan correctamente. Puedes servir tu proyecto con npm run dev o un servidor similar para observar los cambios.
Verifica que las fuentes se carguen localmente inspeccionando el elemento y asegurando que el font-family aplicado corresponda al que has definido. También es recomendable verificar visualmente que la representación de las fuentes sea la esperada por sus características distintivas, como las formas de las letras.
Una integración correcta de las fuentes no solo optimiza la carga del sitio, sino que también garantiza que las tipografías se muestren de manera consistente en todos los navegadores y dispositivos. Esta mejora es un paso más hacia la eficiencia y la performance en la gestión de recursos de un proyecto de desarrollo web.
Esta parte de configuración se me hizo complicada y muy por sentada. Así que te lo explico
En las options:
options:{limit:10000,// O LE PASAMOS UN BOOLEANOS TRUE O FALSE// Habilita o deshabilita la transformación de archivos en base64.mimetype:'aplication/font-woff',// Especifica el tipo MIME con el que se alineará el archivo. // Los MIME Types (Multipurpose Internet Mail Extensions)// son la manera standard de mandar contenido a través de la red.name:"[name].[ext]",// EL NOMBRE INICIAL DEL ARCHIVO + SU EXTENSIÓN// PUEDES AGREGARLE [name]hola.[ext] y el output del archivo seria // ubuntu-regularhola.woffoutputPath:'./assets/fonts/',// EL DIRECTORIO DE SALIDA (SIN COMPLICACIONES)publicPath:'./assets/fonts/',// EL DIRECTORIO PUBLICO (SIN COMPLICACIONES)esModule:false// AVISAR EXPLICITAMENTE SI ES UN MODULO}
Para las imagenes
assetModuleFilename:'assets/images/[hash][ext]'
Esta instrucción hace que webpack le agregue un hash ( un hash es una serie de caracteres aleatorios) y su extencion por medio de esas variables en el string
Asi quedo el Webpack Config
const path =require('path')constHtmlWebpackPlugin=require('html-webpack-plugin')constMiniCssExtractPlugin=require('mini-css-extract-plugin')constCopyPlugin=require('copy-webpack-plugin')module.exports={// mode: 'production', // LE INDICO EL MODO EXPLICITAMENTEentry:'./src/index.js',// el punto de entrada de mi aplicaciónoutput:{// Esta es la salida de mi bundlepath: path.resolve(__dirname,'dist'),// resolve lo que hace es darnos la ruta absoluta de el S.O hasta nuestro archivo// para no tener conflictos entre Linux, Windows, etcfilename:'main.js',// EL NOMBRE DEL ARCHIVO FINAL,assetModuleFilename:'assets/images/[hash][ext][query]'},resolve:{extensions:['.js']// LOS ARCHIVOS QUE WEBPACK VA A LEER},module:{// REGLAS PARA TRABAJAR CON WEBPACKrules:[{test:/\.m?js$/,// LEE LOS ARCHIVOS CON EXTENSION .JS,exclude:/node_modules/,// IGNORA LOS MODULOS DE LA CARPETAuse:{loader:'babel-loader'}},{test:/\.css|.styl$/i,use:[MiniCssExtractPlugin.loader,'css-loader','stylus-loader']},{test:/\.png/,// REGLA PARA ACEPTAR IMAGENES .PNGtype:'asset/resource'},{test:/\.(woff|woff2)$/,// REGLA PARA ARCHIVOS WOFF | WOFF2use:{loader:'url-loader',// NOMBRE DEL LOADERoptions:{limit:false,// O LE PASAMOS UN NUMERO// Habilita o deshabilita la transformación de archivos en base64.mimetype:'aplication/font-woff',// Especifica el tipo MIME con el que se alineará el archivo. // Los MIME Types (Multipurpose Internet Mail Extensions)// son la manera standard de mandar contenido a través de la red.name:"[name].[ext]",// EL NOMBRE INICIAL DEL PROYECTO + SU EXTENSIÓN// PUEDES AGREGARLE [name]hola.[ext] y el output del archivo seria // ubuntu-regularhola.woffoutputPath:'./assets/fonts/',// EL DIRECTORIO DE SALIDA (SIN COMPLICACIONES)publicPath:'./assets/fonts/',// EL DIRECTORIO PUBLICO (SIN COMPLICACIONES)esModule:false}}}]},// SECCION DE PLUGINSplugins:[newHtmlWebpackPlugin({// CONFIGURACIÓN DEL PLUGINinject:true,// INYECTA EL BUNDLE AL TEMPLATE HTMLtemplate:'./public/index.html',// LA RUTA AL TEMPLATE HTMLfilename:'./index.html'// NOMBRE FINAL DEL ARCHIVO}),newMiniCssExtractPlugin(),// INSTANCIAMOS EL PLUGINnewCopyPlugin({// CONFIGURACIÓN DEL COPY PLUGINpatterns:[{from: path.resolve(__dirname ,"src",'assets/images'),// CARPETA A MOVER AL DISTto:"assets/images"// RUTA FINAL DEL DIST}]})]}
Te ayudo a entender algunas cosas. 😃
Rules
Webpack es muy personalizable, desde el module, la rule, los plugins por lo que se podrán observar muchas configuraciones.
Recuerda que url-loader ya está integrada como módulo en Webpack 5 por lo que no es necesario instalarla, a menos que desees configurar ciertos parámetros como lo son limit para especificar el tamaño máximo de tus archivos en bytes donde si el archivo es igual o más grande utiliza el file-loader para que procese su rendimiento, esModule es para permitir que file-loader genere modulos JS que usan la sintaxis ES. Documentatción de url-loader.
url-loader, incorporado en Webpack 5 permite configurar algunos parámetros genéricos.
Rule.mimetype - nos permite determinar el tipo de archivo que será enlazado o cargado.
Notarás que será utilizado para JS en la carga de módulos que tendrán, o pueden tener, contendio estático.
Rule.generator.filename- Donde espeficamos el nombre de la salida para con la regla donde tu mencionas "EL NOMBRE DEL ARCHIVO FINAL" el cual no esta del todo mal, pero complementaria que más que un nombre, es una regla que acompañará los archivos mapeados con asset/resource
Al final, te presento el webpack.config.js que estoy maquetando:
Configuraciones más, configuraciones menos, te adjunté los enlaces para que complementes tu documentación y puedas elaborar más tipos de archvios de configuración de webpack
Gracias Emmanuel, tu respuesta fue muy util, aqui esta la doc de los asset modules que casualmente usamos en la clase anterior https://webpack.js.org/guides/asset-modules/, es util saber que con estos asset modules tambien puedes manejar fuentes y otros tipos de archivos nativamente y configurar el output path con la opcion de generator filename y que si esto no se especifica se utiliza el valor de assetModuleFilename en el objeto output.
Recomiendo leer a profundidad los otros modos del asset modules como:
Resource asset: Es el mismo modo que se explica en esta clase donde los assets como fonts o imagenes son copiados al output directory y cuando los importas en el codigo realmente estas usando la url generada con el hash
Asset inline: Util para importar imagenes en base64 en vez de copiarlas al output directory y usarlas mediante una url
Source assets: Util para poder importar los assets y acceder al contenido directamente como por ejemplo tener un archivo txt y al importar dicho archivo tener acceso a su contenido directamente sin tener que copiar archivos o hacer transformaciones
General assets: Aqui webpack tiene una regla por defecto para decidir si el archivo debe tratarse como resource asset o como inline asset dependiendo de si el tamaño del archivo excede los 8kb o no (menor a 8kb es inline y de lo contrario es resource) esta condicion puede ser modificada con una regla llamada parser.dataUrlCondition.maxSize dentro de la documentacion de webpack tienen un buen ejemplo
pido por favor que el profesor Oscar Barajas EXPLIQUE MAS DETALLADAMENTE lo que hace ya que SOLO DICE LO QUE ESCRIBE y no da fundamentos a lo que HACE
Ya tomaste algun curso con Richard?
Sentí exactamente lo mismo.
La instalación de file-loader, url-loader y raw-loader ya no es necesario a partir de Webpack 5 ya que usando Asset Modules podemos hacer lo mismo y de forma optimizada.
La implementación de fonts quedaría de la siguiente manera:
{test:/\.(woff|woff2)$/i,// Tipos de fuentes a incluirtype:'asset/resource',// Tipo de módulo a usar (este mismo puede ser usado para archivos de imágenes)generator:{filename:'static/fonts/[hash][ext][query]',// Directorio de salida},},
Si esto es real, deja sin validez toda la clase.
Gracias por el dato. Me servió de mucho.
¡Que onda gente!!! Leyendo la documentación, buscando y jugando un poco encontré una alternativa perfecta para empaquetar nuestras fuentes o resources sin necesidad de instalar url-loaderr o file-loader.
file-loader lo utiliza para mover los archivos de imagenes y aplicarle hash?
Como siempre, tuve que invertigar TODO por otros medios, viendo videos de un poco mas de 1 hora en youtube, donde lo explican super claro. No tengo nada contra este profesor, se nota que es un crack en su area. Pero para ensenar aun tiene mucho por mejorar.
Lo peor es que casi media escuela de JS la imparte el y todos sus cursos hay muchos comentarios que coinciden con mi punto de vista.
Aparte de que este curso debe de ser actualizado.
Pero comparte el link del video pues
🔤 Loaders de fuentes
Apuntes
Cuando utilizamos fuentes externas una buena práctica es descargarlas a nuestro proyecto
Debido a que no hara un llamado a otros sitios
Por ello es importante usarlo dentro de webpack
Para esta tarea instalaras y usaras "file-loader" y "url-loader"
instalación con NPM
npm install url-loader file-loader -D
instalación con YARN
yarn add url-loader file-loader -D
Para aplicar esta configuración debes agregar la siguiente información
module.exports={...module:{rules:[...{test:/\.(woff|woff2)$/,use:{loader:"url-loader",options:{// limit => limite de tamañolimit:10000,// Mimetype => tipo de datomimetype:"application/font-woff",// name => nombre de salidaname:"[name].[ext]",// outputPath => donde se va a guardar en la carpeta finaloutputPath:"./assets/fonts/",publicPath:"./assets/fonts/",esModule:false,}}}]},...}
Es importante que dentro de los estilos agregues @font-face
Qué pasa si pego (google) directamente en HTML ? después, pegar la font-family en CSS?
Es mejor descargar la fuente o pegarla directamente (CDN)?
¡Excelente pregunta Christian!
Si bien es una solución bastante válida, puede ser mejor
Pasa que anteriormente Google Fonts utilizaba un CDN optimizado, es decir, que los recursos se descargaban rápido. Pero en las últimas versiones ya no trae ese approach, haciendo que la performance baje un poco. Una solución es bajar las fuentes de tal manera que los recursos estáticos se encuentren en un solo lugar y sea un poco más rápido su respectiva descarga. Frameworks como Next.js trae optimización de recursos incluyendo Google Fonts de forma por defecto :D
🤘 Espero haberte respondido como esperabas :)
Demasiado pobre la explicación de esta clase y las configuración.
esModule: false dice que no lo vamos a usar.... ok, que carajos es lo que no vamos a usar? que es esModule?
Si, ya se que es nuestro deber leer documentación, pero no es el único tema que explica por encima dándolo por sentado como si todos supiéramos de qué está hablando o qué es lo que hace cada partecita de esas configuraciones.
las explicaciones en este curso pueden mejorar, si
Completamente de acuerdo, solo explica para si mismo, espero que otros cursos con este señor no sean así
Venia tan animada con la escuela de JavaScript que estaba haciendo curso por dia, hasta que llegue a esta curso y a esta explicación tan pésima que me están dando ganas de no seguir al ver que Oscar es el profesor de los próximos cursos. es un sentimiento totalmente personal porque creo que si el objetivo es enseñar sobre qué es y para qué sirve web pack el ejercicio desarrollado está muy mal orientado, la verdad me genera más dudas que comprensión la forma que se da cada tema, no sé si para este curso había que llegar con algún conocimiento experto previo teniendo en cuenta que he venido siguiendo la ruta de aprendizaje de la escuela y creo que no es así.
Si la idea de estas clases es simplemente replicar el ejercicio del profesor sin que el explique el por qué cada cosa, la verdad me parece totalmente inadecuado.
Seguiré porque algo me quedara y entendiendo que debo profundizar por mi lado para logar comprender el objetivo de este tema.
X2, Estoy en las mismas con el profesor, a veces adelanto rápido el curso con la ilusión de que el proximo que viene haremos un proyecto desde 0 para saber cómo se configura y no replicar código.
Y bueno, a tirar codigo como pan caliente sin explicar absolutamente nada, como todos los cursos de este senor.
Eso está muy desordenado, todo lo avienta a la carpeta de assets y el orden debería de ser igual como lo tienes en src replicarlo en el folder de dist y assets, aquí pongo mi configuración
y sin tanto rollo se logra un mejor orden el dist queda mejor acomodado y van comprimidas las img en base64 y el scss y css va unificado en un solo archivo.
De este modo no copiaran las imágenes de nuevo, puesto que ya estamos usando Asset Modules.
Ademas, si quieren que les quede las fonts e images dentro de assets solo agreguen assets/ antes de images y fonts respectivamtente, asi:
No entiendo, lo hice igual y me esta copiando las fuentes dentro de la carpeta fonts y también dentro de la carpeta images, alguno sabe por que puede ser esto?
Hola, a partir de webpack 5 se utilisa otro método para cargar fuentes. De todas formas segui buscando y consegui solucionarlo así.
test: /.(woff|woff2)$/,
use: {
loader: 'url-loader',
options: {
limit: 10000,
mimetype: "application/font-woff",
name: "[name].[contenthash].[ext]",
outputPath: "./assets/fonts/",
publicPath: "./assets/fonts/",
esModule: false,
},
},
type: 'javascript/auto',** // con esta línea no duplica los assets.**
Gracias @RaCode75 me ayudo mucho tu solución.
El detalle es que luego me apareció el siguiente error en consola:
El codigo que colocaste funciona perfectamente, separa las fonts de las images, sin embargo en consola me aparece ese error.
Me uno a las voces que piden actualización de éste curso por dos razones:
Está desactualizado.
Puede ser potencialmente peligroso.
El punto 1 es lógico, ya hay mejores formas de hacer lo mismo sin instalar otras dependencias.
Sobre el segundo punto, les recomiendo seguir la solución de Jhean Carlos que está en los comentarios y dejarle un corazón.
Al instalar las dependencias, el mismo npn advierte de problemas graves de seguridad:
found 2 high severity vulnerabilities
La verdad, nunca me había encontrado con éste mensaje en NPM.
Segundo, la solución del curso no me funcionó, el navegador no cargaba las fuentes, pero con la solución que mencioné arriba, sí.
Saludos.
No es necesario instalar las dependencias de url-loader y file-loader.
En la versión 5 de webpack integraron las funciones que hacían esas 2 dependencias a los assets modules pueden ver la documentacion de ese modulo [aqui ].(https://webpack.js.org/guides/asset-modules/#root).
Una recomendación que hace más cómodo al ver reflejado el output en la carpeta dist es usar la propiedad clean. Limpia la carpeta dist y la llena con el output recién compilado.
Dejo la documentación aqui.
output:{ path: path.resolve(__dirname,"dist"), filename:"main.js", assetModuleFilename:"./assets/images/[hash][ext][query]", clean:true,// Agregar esta propiedad},
Vamos al punto principal, para el que el código te funcione similar como el profe solamente tienen que modificar en el archivo [webpack.config.js] en la sección de **rules ** y editamos el apartado que creamos esta clase.
Te preguntaras ¿por que no usamos las otras propiedades que coloca el profesor en la clase?
Es debido a que gran parte de esas opciones ya vienen por default en el module asset y solamente usamos la propiedad generator para organizar los assets como en la clase.
Igualmente generator tiene algunas propiedades similares a las que usa el profesor pero serían unos pocos pasos más y no se si me estaría adelantando en el curso.
Te dejo aqui la docs de los generators
Esto debería estar como comentario destacado, ayudó demasiado en serio!
Gracias!
Tus posibles dudas resueltas:
1. ¿Por qué usamos @font-face?
Cuando importamos una fuente desde Google, realmente lo que hace e generar esta regla en nuestros estilos. En esencia estamos escribiéndolo manualmente.
.
2. ¿De dónde salen todos los parametros que estamos poniendo dentro de font-face?
Son propiedades que puede tener la regla de estilos font-face.
font-family: "Es el nombre que tú le asignas a la fuente. Puede ser el que quieras, pero debes ser consistente con este nombre en todo el documento.
src: Url o ruta hacia donde se encuentra la fuente. En este caso podríamos pegar alguna url de internet o usar un directorio local.
.
3. ¿Por qué le pasamos dos src a la @font-face?
¿Te fijaste que le mandamos dos url? Una para el formato woff2 y otra para el formato woff. Esto es por cuestiones de compatibilidad de los navegadores. No todos los navegadores son compatibles con todos los formatos de fuentes. Por este motivo se introducen dos valores en "src", para que en caso de que una no funcione, el navegador pueda cargar la otra.
font-style: Se refiere a cómo se va a estilizar la fuente: normal, itálica o negritas. En caso de no poner nada, el valor por defecto es "normal".
Hay más propiedades que se pueden editar en la regla de estilos @font-face y puedes verlo en este artículo de w3schools
.
4. ¿Por qué utilizamos url-loader y file-loader?
El curso está un poco desactualizado. Antes de webpack 5, estos eran los loaders para:
url-loader: exportar el archivo en esquema URI. De manera sencilla esto optimiza la forma en que el servidor solicita los recursos. En esencia es para agregar el recurso al gráfico de dependencias. Te recomiendo leer más sobre el esquema URI si quieres profundizar.
file-loader: Si el url-loader permite agregar el archivo al gráfico de dependencias, el file-loader permite exportarlo.
.
Si te lo estás preguntando al finalizar el video: es correcto, nunca usamos file-loader aquí (revisa el video nuevamente y verás que nunca lo configuramos ni nada, es posible que en videos posteriores lo usemos). ¿Entonces cómo es que se generaron los archivos de las fuentes en la exportación? Esa es la magia del esquema URI. El profesor debería meterse en el detalle, ya que es posible que si excedemos el limit que le pusimos a url-loader, webpack utilice en su defect url-loader, pero esto nunca lo configuramos.
.
¿Por qué digo que está desactualizado el curso? Porque actualmente se puede usar el Asset-management que trae webpack por defecto. ¿Recuerdas que lo utilizamos para pasar las imágenes en la lección anterior a esta? Pues es lo mismo, solo tienes que cambiar el valor del atributo typeal correspondiente. Más info en la documentación
.
5. ¿De dónde rayos salen esos parámetros que le pone al url-loader el profe?
Esto es un punto malo del profesor. Que solo pone lo que escribe y no explica el por qué de cada propiedad.
Pero te lo explico:
.
Primero considera que este recurso ya no se debería usar. En la pregunta 4 te deje un enlace al nuevo recurso que deberíamos usar.
Segundo, ten a la mano la documentación de url-loader, a la cual puedes acceder aquí:
En dicha documentación puedes ver que los parámetros que puso el profe son los que te permite este loader.
.
Hay más, pero aquí te resumo los que utilizó el profesor:
limit: El url-loader convierte los archivos a base 64. Si quieres saber a qué se refiere eso de base64, por favor lee este artículo. Al transformarlo, el archivo tendrá un peso en bytes, si el peso es menor al límite, se devuelve una URI, lo cual nos ayudará a generar una dependencia y así poder agregar el elemento al gráfico de dependencias. Nuevamente te recomiendo leer sobre el esquema URI. Si te lo preguntas, podemos poner un valor más elevado en limit. El valor por defecto si no lo ponemos, es "sin límite".
.
mimetype: Es una forma de transmitir información a trvés de internet. Puedes buscar en google como "Media Type". Según la wikipedia ya no debemos usar application-font-woff, sino simplemente font/woff. Si te lo preguntas, esto no es obvio, tienes que investigarlo y es algo que el profesor debería aclarar.
.
name: Nombre con el que se exportará. Tampoco es obvio que podemos poner el nombre así, ya que no aparece en el artículo de url-loader. Supongo que aplica las mismas reglas de "output" que aparece está hasta al principio de nuestro archivo de configuración, ya que supongo que lo hereda de module.exports. Puedes ver documentación de esto aquí:
.
outputPath: Lugar donde se exportará el archivo. No viene en la documentación, así que no es obvio. De igual manera supongo que hereda la propiedad desde module.exports.
.
PublicPath: lugar donde está tu archivo. Aunque no aparece en la documentación como tal en url-loader, supongo que hereda esta propiedad de module.exports. A mi me sirvió este vínculo de stackoverflow.
.
esModule: El otro loader file-loader genera, por defecto, módulos con syntaxis de EcmaScript (ES = EcmaScript, versiónes nuevas de JAvaScript). Para evitar esto y hacer que se genere una sintaxis común para todo, ponemos en false.
.
6. ¿De dónde sale assetModuleFileName?
Empieza por leer la documentación en la parte de output.
Esto parte del video no tiene que ver con las fonts, es solo que al profesor se le debió olvidar hacerlo antes.
Por defecto el type utilizamos (asset/resource, revisa la parte donde exportamos las imágenes) exporta las imágenes con el nombre: [hash][ext][query].
hash: Número aleatorio.
ext: extensión
query: utilizado para dar parámetros adicionales.
¿Se puede cambiar esto? Sí, así es. Puedes hacerlo en la parte de module.exports.output, agregando/modificando assetModuleFilename:
Otro curso mas que se me vuele tedioso, parece estar desactualizado. Hay comentarios viejos sin contestar, nadie de platzi se asoma por estos lados.
El profesor explicando a 1000 por hora, hay cosas que no se explican y toca busca por fuera ( youtube).
Oscar un crack en el tema de JS, pero como profesor deja mucho que desear.
Opino lo mismo, estoy frustrado con el tema de tecnologia desde que comence a ver las clases con Oscar, es un monstruo en el tema pero como profesor me confunde mucho.
Al comienzo dice: vamos a usar una expresion irregular, si no saben que es, vean el curso de expresiones irregulares que dicto. Mi mente: Por que no esta el curso de expresiones irregulares antes? por que el profe supone que ya sabemos de expresiones irregulares? por que solo repite lo que escribe y no da a entender para que sirve cada comando?
estoy perdido..... O_o
Buenaas! No entiendo el por qué al compilar a mí me aparecen también las fuentes con hash y al profesor no
)
¿Cómo estás?
Tuve el mismo problema. Te paso la resolución que en mi caso funcionó:
"En este caso vamos a decirle que vamos hacer estas implementaciones en lo que viene siendo nuestras particularidades, en lo que vamos a requerir Y, va, a ser, nuestro recurso que yo tengo de esta misma particularidad de nuestra lógica que estamos trabajando en esta forma. Obviamente es lo que nosotros tenemos que requerir."
Lo siento, se me hace difícil entender
Completamente...
duro
Me lo estoy pasando bien y conociendo webpack pero ni de loco podré acordarme de todos los pasos que estamos siguiendo estamos instalando mill cosas y cada cosa tiene su configuración.
Esta fenomenal como curso para conocer la herramienta pero como me toque trabajar con webpack tendré q básicamente que ir investigando como hacer cada cosa en ese momento
creo hay un curso práctico que va después de este
en el assetModuleFilename, para que sirve el query?