CursosEmpresasBlogLiveConfPrecios

Assets require hook

Clase 11 de 22 • Curso de Server Side Render con Express

Clase anteriorSiguiente clase

Contenido del curso

Conocimientos necesarios para aplicar SSR

  • 1
    Lo que aprenderás sobre server side render

    Lo que aprenderás sobre server side render

    01:13 min
  • 2
    Presentación del proyecto del curso y sus herramientas

    Presentación del proyecto del curso y sus herramientas

    01:52 min
  • 3
    ¿Qué es Server Side Rendering?

    ¿Qué es Server Side Rendering?

    04:36 min

Preparando entorno para aplicar SSR

  • 4
    Actualizando dependencias en NPM

    Actualizando dependencias en NPM

    05:18 min
  • 5
    Creación del servidor en Express

    Creación del servidor en Express

    07:35 min
  • 6
    Usando Nodemon y Dotenv

    Usando Nodemon y Dotenv

    05:31 min
  • 7
    Integración de Webpack con Express

    Integración de Webpack con Express

    13:10 min

Integración de Express con React

  • 8
    Servir React con Express

    Servir React con Express

    05:25 min
  • 9
    Abstrayendo React Router, creando history y haciendo initialState más accesible

    Abstrayendo React Router, creando history y haciendo initialState más accesible

    12:01 min

Aplicar Server Side Rendering

  • 10
    Definición de la función principal para realizar el renderizado desde el servidor

    Definición de la función principal para realizar el renderizado desde el servidor

    11:59 min
  • 11
    Assets require hook

    Assets require hook

    Viendo ahora
  • 12
    Hydrate y estado de Redux desde Express

    Hydrate y estado de Redux desde Express

    09:18 min

Trabaja con entornos de desarrollo y producción

  • 13
    Configurando nuestro servidor para producción

    Configurando nuestro servidor para producción

    07:02 min
  • 14
    Configurando webpack para producción

    Configurando webpack para producción

    11:28 min
  • 15
    Optimización del Build

    Optimización del Build

    09:07 min
  • 16
    Aplicar hashes al nombre de nuestros builds

    Aplicar hashes al nombre de nuestros builds

    10:40 min

Buenas prácticas de Server Side Render

  • 17
    Vendorfiles en Webpack: definiendo cacheGroups

    Vendorfiles en Webpack: definiendo cacheGroups

    03:54 min
  • 18
    Vendorfiles en Webpack: generando el vendorfile

    Vendorfiles en Webpack: generando el vendorfile

    07:19 min
  • 19
    Configuración de ESLint

    Configuración de ESLint

    10:45 min

Alternativas al SSR con Express

  • 20
    Cómo implementar Next.js

    Cómo implementar Next.js

    05:58 min
  • 21
    Cómo usar Gatsby.js

    Cómo usar Gatsby.js

    04:02 min
  • 22
    Cuando usar cada una de las herramientas presentadas

    Cuando usar cada una de las herramientas presentadas

    02:55 min
Tomar examen

Escuelas

  • Desarrollo Web
    • Fundamentos del Desarrollo Web Profesional
    • Diseño y Desarrollo Frontend
    • Desarrollo Frontend con JavaScript
    • Desarrollo Frontend con Vue.js
    • Desarrollo Frontend con Angular
    • Desarrollo Frontend con React.js
    • Desarrollo Backend con Node.js
    • Desarrollo Backend con Python
    • Desarrollo Backend con Java
    • Desarrollo Backend con PHP
    • Desarrollo Backend con Ruby
    • Bases de Datos para Web
    • Seguridad Web & API
    • Testing Automatizado y QA para Web
    • Arquitecturas Web Modernas y Escalabilidad
    • DevOps y Cloud para Desarrolladores Web
  • English Academy
    • Inglés Básico A1
    • Inglés Básico A2
    • Inglés Intermedio B1
    • Inglés Intermedio Alto B2
    • Inglés Avanzado C1
    • Inglés para Propósitos Específicos
    • Inglés de Negocios
  • Marketing Digital
    • Fundamentos de Marketing Digital
    • Marketing de Contenidos y Redacción Persuasiva
    • SEO y Posicionamiento Web
    • Social Media Marketing y Community Management
    • Publicidad Digital y Paid Media
    • Analítica Digital y Optimización (CRO)
    • Estrategia de Marketing y Growth
    • Marketing de Marca y Comunicación Estratégica
    • Marketing para E-commerce
    • Marketing B2B
    • Inteligencia Artificial Aplicada al Marketing
    • Automatización del Marketing
    • Marca Personal y Marketing Freelance
    • Ventas y Experiencia del Cliente
    • Creación de Contenido para Redes Sociales
  • Inteligencia Artificial y Data Science
    • Fundamentos de Data Science y AI
    • Análisis y Visualización de Datos
    • Machine Learning y Deep Learning
    • Data Engineer
    • Inteligencia Artificial para la Productividad
    • Desarrollo de Aplicaciones con IA
    • AI Software Engineer
  • Ciberseguridad
    • Fundamentos de Ciberseguridad
    • Hacking Ético y Pentesting (Red Team)
    • Análisis de Malware e Ingeniería Forense
    • Seguridad Defensiva y Cumplimiento (Blue Team)
    • Ciberseguridad Estratégica
  • Liderazgo y Habilidades Blandas
    • Fundamentos de Habilidades Profesionales
    • Liderazgo y Gestión de Equipos
    • Comunicación Avanzada y Oratoria
    • Negociación y Resolución de Conflictos
    • Inteligencia Emocional y Autogestión
    • Productividad y Herramientas Digitales
    • Gestión de Proyectos y Metodologías Ágiles
    • Desarrollo de Carrera y Marca Personal
    • Diversidad, Inclusión y Entorno Laboral Saludable
    • Filosofía y Estrategia para Líderes
  • Diseño de Producto y UX
    • Fundamentos de Diseño UX/UI
    • Investigación de Usuarios (UX Research)
    • Arquitectura de Información y Usabilidad
    • Diseño de Interfaces y Prototipado (UI Design)
    • Sistemas de Diseño y DesignOps
    • Redacción UX (UX Writing)
    • Creatividad e Innovación en Diseño
    • Diseño Accesible e Inclusivo
    • Diseño Asistido por Inteligencia Artificial
    • Gestión de Producto y Liderazgo en Diseño
    • Diseño de Interacciones Emergentes (VUI/VR)
    • Desarrollo Web para Diseñadores
    • Diseño y Prototipado No-Code
  • Contenido Audiovisual
    • Fundamentos de Producción Audiovisual
    • Producción de Video para Plataformas Digitales
    • Producción de Audio y Podcast
    • Fotografía y Diseño Gráfico para Contenido Digital
    • Motion Graphics y Animación
    • Contenido Interactivo y Realidad Aumentada
    • Estrategia, Marketing y Monetización de Contenidos
  • Desarrollo Móvil
    • Fundamentos de Desarrollo Móvil
    • Desarrollo Nativo Android con Kotlin
    • Desarrollo Nativo iOS con Swift
    • Desarrollo Multiplataforma con React Native
    • Desarrollo Multiplataforma con Flutter
    • Arquitectura y Patrones de Diseño Móvil
    • Integración de APIs y Persistencia Móvil
    • Testing y Despliegue en Móvil
    • Diseño UX/UI para Móviles
  • Diseño Gráfico y Arte Digital
    • Fundamentos del Diseño Gráfico y Digital
    • Diseño de Identidad Visual y Branding
    • Ilustración Digital y Arte Conceptual
    • Diseño Editorial y de Empaques
    • Motion Graphics y Animación 3D
    • Diseño Gráfico Asistido por Inteligencia Artificial
    • Creatividad e Innovación en Diseño
  • Programación
    • Fundamentos de Programación e Ingeniería de Software
    • Herramientas de IA para el trabajo
    • Matemáticas para Programación
    • Programación con Python
    • Programación con JavaScript
    • Programación con TypeScript
    • Programación Orientada a Objetos con Java
    • Desarrollo con C# y .NET
    • Programación con PHP
    • Programación con Go y Rust
    • Programación Móvil con Swift y Kotlin
    • Programación con C y C++
    • Administración Básica de Servidores Linux
  • Negocios
    • Fundamentos de Negocios y Emprendimiento
    • Estrategia y Crecimiento Empresarial
    • Finanzas Personales y Corporativas
    • Inversión en Mercados Financieros
    • Ventas, CRM y Experiencia del Cliente
    • Operaciones, Logística y E-commerce
    • Gestión de Proyectos y Metodologías Ágiles
    • Aspectos Legales y Cumplimiento
    • Habilidades Directivas y Crecimiento Profesional
    • Diversidad e Inclusión en el Entorno Laboral
    • Herramientas Digitales y Automatización para Negocios
  • Blockchain y Web3
    • Fundamentos de Blockchain y Web3
    • Desarrollo de Smart Contracts y dApps
    • Finanzas Descentralizadas (DeFi)
    • NFTs y Economía de Creadores
    • Seguridad Blockchain
    • Ecosistemas Blockchain Alternativos (No-EVM)
    • Producto, Marketing y Legal en Web3
  • Recursos Humanos
    • Fundamentos y Cultura Organizacional en RRHH
    • Atracción y Selección de Talento
    • Cultura y Employee Experience
    • Gestión y Desarrollo de Talento
    • Desarrollo y Evaluación de Liderazgo
    • Diversidad, Equidad e Inclusión
    • AI y Automatización en Recursos Humanos
    • Tecnología y Automatización en RRHH
  • Finanzas e Inversiones
    • Fundamentos de Finanzas Personales y Corporativas
    • Análisis y Valoración Financiera
    • Inversión y Mercados de Capitales
    • Finanzas Descentralizadas (DeFi) y Criptoactivos
    • Finanzas y Estrategia para Startups
    • Inteligencia Artificial Aplicada a Finanzas
    • Domina Excel
    • Financial Analyst
    • Conseguir trabajo en Finanzas e Inversiones
  • Startups
    • Fundamentos y Validación de Ideas
    • Estrategia de Negocio y Product-Market Fit
    • Desarrollo de Producto y Operaciones Lean
    • Finanzas, Legal y Fundraising
    • Marketing, Ventas y Growth para Startups
    • Cultura, Talento y Liderazgo
    • Finanzas y Operaciones en Ecommerce
    • Startups Web3 y Blockchain
    • Startups con Impacto Social
    • Expansión y Ecosistema Startup
  • Cloud Computing y DevOps
    • Fundamentos de Cloud y DevOps
    • Administración de Servidores Linux
    • Contenerización y Orquestación
    • Infraestructura como Código (IaC) y CI/CD
    • Amazon Web Services
    • Microsoft Azure
    • Serverless y Observabilidad
    • Certificaciones Cloud (Preparación)
    • Plataforma Cloud GCP

Platzi y comunidad

  • Platzi Business
  • Live Classes
  • Lanzamientos
  • Executive Program
  • Trabaja con nosotros
  • Podcast

Recursos

  • Manual de Marca

Soporte

  • Preguntas Frecuentes
  • Contáctanos

Legal

  • Términos y Condiciones
  • Privacidad
  • Tyc promociones
Reconocimientos
Reconocimientos
Logo reconocimientoTop 40 Mejores EdTech del mundo · 2024
Logo reconocimientoPrimera Startup Latina admitida en YC · 2014
Logo reconocimientoPrimera Startup EdTech · 2018
Logo reconocimientoCEO Ganador Medalla por la Educación T4 & HP · 2024
Logo reconocimientoCEO Mejor Emprendedor del año · 2024
De LATAM conpara el mundo
YoutubeInstagramLinkedInTikTokFacebookX (Twitter)Threads
      Diego Andres Cabrera Rojas

      Diego Andres Cabrera Rojas

      student•
      hace 6 años
        Jose Daniel Hernandez Quiceno

        Jose Daniel Hernandez Quiceno

        student•
        hace 6 años
        Héctor Hugo Sandoval Marcelo

        Héctor Hugo Sandoval Marcelo

        student•
        hace 5 años
      Fernando Cordero

      Fernando Cordero

      student•
      hace 6 años
        Daniel Valdez Torres

        Daniel Valdez Torres

        student•
        hace 5 años
      Daniel Hernández

      Daniel Hernández

      student•
      hace 6 años
        Carlos López

        Carlos López

        student•
        hace 6 años
        José Ocando

        José Ocando

        student•
        hace 6 años
      Oscar Rodrigo Leon Mojica

      Oscar Rodrigo Leon Mojica

      student•
      hace 5 años
        Luis Encina

        Luis Encina

        student•
        hace 5 años
      José Enrique Pérez Aquino

      José Enrique Pérez Aquino

      student•
      hace 5 años
      Juan Pablo Celiz

      Juan Pablo Celiz

      student•
      hace 5 años
      Hector Jose Flores Colmenarez

      Hector Jose Flores Colmenarez

      student•
      hace 6 años
      Miguel Hernández

      Miguel Hernández

      student•
      hace 5 años
        Miguel Hernández

        Miguel Hernández

        student•
        hace 5 años
      Enric Vallribera

      Enric Vallribera

      student•
      hace 6 años
        Carlos Sampol

        Carlos Sampol

        Team Platzi•
        hace 6 años
        Enric Vallribera

        Enric Vallribera

        student•
        hace 6 años
      Victor Hugo Muñoz Hernández

      Victor Hugo Muñoz Hernández

      student•
      hace 4 años
      Bruno Amadori

      Bruno Amadori

      student•
      hace 6 años
        Miguel Hernández

        Miguel Hernández

        student•
        hace 5 años
        Miguel Hernández

        Miguel Hernández

        student•
        hace 5 años
      Anibal Moises Garcia Moy

      Anibal Moises Garcia Moy

      student•
      hace 5 años
      Félix Andersson

      Félix Andersson

      student•
      hace 6 años
        Jorge Iván Otero Vargas

        Jorge Iván Otero Vargas

        student•
        hace 5 años
      Guillermo Andres Valenzuela Palencia

      Guillermo Andres Valenzuela Palencia

      student•
      hace 6 años
        Alan David R.L.

        Alan David R.L.

        student•
        hace 6 años
      Juan Carlos Pinzón

      Juan Carlos Pinzón

      student•
      hace 6 años
      Nilson Diaz

      Nilson Diaz

      student•
      hace 5 años
      Axlin Miranda

      Axlin Miranda

      student•
      hace 4 años
      john fredy quimbaya orozco

      john fredy quimbaya orozco

      student•
      hace 5 años
      Jorge Méndez Ortega

      Jorge Méndez Ortega

      student•
      hace 5 años
        Massimo Di Berardino

        Massimo Di Berardino

        student•
        hace 5 años
      john fredy quimbaya orozco

      john fredy quimbaya orozco

      student•
      hace 5 años

      Para los que no les funciona los assets , sigue mostrandose rota las cosas , solo instalen la version 5.1 npm install file-loader@5.1.0 -D -E , desde la ultima version no esta funcionando , aqui la gran pregunta seria , como se logra entonces cargar las imagenes con la nueva version, pero si no quieren tener problemas ahi esta la solucion temporal.

      Si alguien lo logra con las nuevas versiones de file-loader, por favor cuentanos, realmente esta es una solucion temporal

      Es verdad, la versión 6 no funciona :/ Gracias por la solución

      Super! Para la fecha aun hay problemas con la version 6.0.0 de file-loader y asset-require-hook, entonces instalen el file-loader con la version 5.1.0. y no tendrán problemas al chequear su server-side.

      npm i file-loader@5.1.0 -D ```

      Gracias!, Marzo del 2021 y funciona, y sigue sin cargar las imagenes con la version 6.0.0

      En mi caso tuve que agregar mi componente Layout para que se viera el header de la app.

      const html = renderToString( <Provider store={store}> <StaticRouter location={req.url} context={{}}> <Layout> {renderRoutes(serverRoutes)} </Layout> </StaticRouter> </Provider>, );

      Agradezco la solución, sin embargo me gustaría que el Prof. nos ampliara el porque sucede esto...

      Gracias

      Exacto, no es la solución del problema… Porque solo agrega el header. Sigue persistiendo el problema con los iconos de los items.

      para los que estan trabajando con la version 6 de file-loader tiene que especificar el tipo de hashing para asset-require-hook y para el file-loader

      require('asset-require-hook')({ extensions: ['jpg', 'png', 'gif'], name: '/assets/[md5:hash].[ext]', });
      { test: /\.(png|gif|jpg)$/, use: [ { 'loader': 'file-loader', options: { name: 'assets/[md5:hash].[ext]', } } ] },

      Genial! ha funcionado! 1- modificación en src/server/index.js 2- modificación de webpack.config.js (module.rules[*].'file-loader')

      Assets require hook

      Assets require hook es un hook que se encarga de importar todas nuestras imágenes en tiempo real cuando sean requeridas mediante SSR

      Con esto, tendremos listo nuestro SSR en su totalidad. Para comenzar instalamos la dependencias

      npm install asset-require-hook

      Luego agregamos la siguiente lineas al index.js del servidor

      require('asset-require-hook')({ extensions: ['jpg', 'png', 'gif'], name: '/assets/[hash].[ext]', });

      Y listo, tendremos cualquier tipo de imagen disponible en nuestro SSR app

      "Vamos a copiar exactamente" (min 1:50) es la definición más precisa del curso.

      Para los que tienen problemas cargando las imágenes usando el paquete asset-require-hook verifiquen que version de file-loader tienen, si tienen la versión 6.0.0 deberán bajar a la versión ```5.1.0`` la cual es la más reciente donde este problema no ocurre.

      Al parecer hay algunos problemas con file-loader@6.0.0 en su ultima version.

      Como saben en la versión 6 de file-loader no funciona bien ya que el hash que se genera en el backend es diferente al del frontend, lo solucione dejando de usar el hash en la configuración tanto de webpack como del asset require hook. Al final quedo así: en index.js del servidor

      require('asset-require-hook')({ extensions: ['jpg', 'png', 'gif'], name: '/assets/[name].[ext]', })

      y en webpack añadi la configuración para el nombre de los assets de la siguiente manera en el output de webpack:

      output: { // tu configuración assetModuleFilename: 'assets/[name][ext]', }

      Con eso aunque tenga el nombre por defecto del archivo ya cargaran los assets. Y en la configuración de webpack en las reglas para el file-loader actualmente esta obsoleto y recomiendan usar los asset modules el cual para que funcione a nuestro proyecto deberia ser:

      { test: /\.(png|jpg)$/i, type: 'asset/resource', }

      Espero les funcione, yo estube toda la tarde buscando una solución pero al final logre solucionarlo así ya que en internet no encontre información sobre assets require hook

      Por cierto, la configuración de las rules solo funciona en webpack5 por que ahí file-loader esta DEPRECATED

      Tengo la configuración tal cual, incluso he copiado y pegado código y no me muestra las imágenes sin Javascript. Veo que no soy al único que le ha pasado.

      Que versión del file-loader estas usando ? Recientemente actualizaron a la v6 y esta causando ese conflicto. Si bajas a la 5.1.0 del file-loader no deberias tener problemas

      He visto que hay un problema con el file-loader, si se utiliza la versión actual, que en mi caso es la versión 6, no funciona, he descargado el proyecto de archivos y funcionaba hasta que he actualizado a esa versión. Como se podría resolver?

      Mi solución fue utilizar los Asset Modules que vienen con Webpack5, especificamente asset/resource

      { test: /\.(png|gif|jpg)$/, type: 'asset/resource', }

      Para que funcionen los hashes también agregué en el output la regla de assetModuleFilename de la siguiente manera

      output: { path: path.resolve(__dirname, 'dist'), filename: 'bundle/app.js', publicPath: '/', assetModuleFilename: 'assets/[hash][ext]', }

      Para que funcione asset-require-hook tenemos que tener el mismo método de cifrado, en este caso webpack utiliza md4 con 20 caracteres, entonces nuestra configuración de asset-require-hook queda así

      require('asset-require-hook')({ extensions: ['jpg', 'png', 'gif'], name: 'assets/[md4:hash:20].[ext]', });

      Espero les ayude, pueden jugar con la configuración de asset-require-hook en el método de cifrado o la cantidad de caracteres si no funciona.

      Lo que pude detectar, es que si tenés la version 6.0, de alguna forma el HASH que se genera como nombre de los archivos de las imagenes en el backend no coincide con el HASH de la URL del llamado a cada imagen en el frontend.

      raro.

      Si, también note lo mismo. Sigo sin solucionarlo :(

      En el output de webpack agrega:

      assetModuleFilename: 'assets/[name][ext]',

      y en el servidor modifica el name:

      require('asset-require-hook')({ extensions: ['jpg', 'png', 'gif'], name: '/assets/[name].[ext]', })

      y en las reglas donde esta file-loader deberia ser así si usas webpack5:

      { test: /\.(png|jpg)$/i, type: 'asset/resource', }

      si corremos npm outdated nos damos cuenta de que la versión estable de file-loader es la 5.1.0

      Ese paquete esta bastante viejo y utiliza dependencias deprecadas

      Personalmente prefiero dejar el pre-render sin esas imagenes

      Deprecado != Deprecate

      Al deshabilitar Javascript, no me cargan las imagenes....

      Hola, Guillermo.

      Asegúrate de tener el archivo así:

      require('ignore-styles'); require('@babel/register')({ presets: ['@babel/preset-env', '@babel/preset-react'], }); require('asset-require-hook')({ extensions: ['jpg', 'png', 'gif'], name: '/assets/[hash].[ext]', }); require('./server');

      Yo tenía el mismo problema que tu pero era porque tenia un typo. Espero te sirva.

      Un dato, no me cargaba los archivos .webp me daba error, los a cambié a .png y ya funcionó todo ok 👀. Sí agregué la extensión en el asset-require-hook

      Hola ! Existe alguna alternativa a asset-require-hook sin tener que degradar dependencias ? ya que la unica manera con la que consegui solucionarlo fue siriviendo las imagenes como estaticos con express.static() .

      Saludos, en el caso que los assets del css se tenga en dos carpeta ejemplo: /mobile /desktop - estilo para versión escritorio

      En ese caso, como se le pasaría ese valor en name?

      require('asset-require-hook')({ extensions: ['jpg', 'png', 'gif'], name: '/assets/[hash].[ext]', });

      sale el siguiente error

      const resource = this._identifier.split('!').pop(); ^

      TypeError: Cannot read property 'split' of undefined

      si alguien sabe como solucionar

      Por qué usan react-asset-hooks y no utilizan el manejo de staticos de express?

      Hola Jorge, fue la manera en la que el profesor del curso lo implemento, pero si te funciona bien con el manejo de estáticos de express también puedes hacerlo

      tengo el siguiente error const resource = this._identifier.split('!').pop(); ^

      TypeError: Cannot read property 'split' of undefined