CursosEmpresasBlogLiveConfPrecios

Assets require hook

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

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

        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.

          Jose Daniel Hernandez Quiceno

          Jose Daniel Hernandez Quiceno

          student•
          hace 6 años

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

          Héctor Hugo Sandoval Marcelo

          Héctor Hugo Sandoval Marcelo

          student•
          hace 6 años

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

        Fernando Cordero

        Fernando Cordero

        student•
        hace 6 años

        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 ```
          Daniel Valdez Torres

          Daniel Valdez Torres

          student•
          hace 5 años

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

        Daniel Hernández

        Daniel Hernández

        student•
        hace 6 años

        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>, );
          Carlos López

          Carlos López

          student•
          hace 6 años

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

          Gracias

          José Ocando

          José Ocando

          student•
          hace 6 años

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

        Oscar Rodrigo Leon Mojica

        Oscar Rodrigo Leon Mojica

        student•
        hace 5 años

        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]', } } ] },
          Luis Encina

          Luis Encina

          student•
          hace 5 años

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

        José Enrique Pérez Aquino

        José Enrique Pérez Aquino

        student•
        hace 5 años

        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

        Juan Pablo Celiz

        Juan Pablo Celiz

        student•
        hace 5 años

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

        Hector Jose Flores Colmenarez

        Hector Jose Flores Colmenarez

        student•
        hace 6 años

        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.

        Miguel Hernández

        Miguel Hernández

        student•
        hace 5 años

        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

          Miguel Hernández

          Miguel Hernández

          student•
          hace 5 años

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

        Enric Vallribera

        Enric Vallribera

        student•
        hace 6 años

        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.

          Carlos Sampol

          Carlos Sampol

          Team Platzi•
          hace 6 años

          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

          Enric Vallribera

          Enric Vallribera

          student•
          hace 6 años

          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?

        Victor Hugo Muñoz Hernández

        Victor Hugo Muñoz Hernández

        student•
        hace 5 años

        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.

        Bruno Amadori

        Bruno Amadori

        student•
        hace 6 años

        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.

          Miguel Hernández

          Miguel Hernández

          student•
          hace 5 años

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

          Miguel Hernández

          Miguel Hernández

          student•
          hace 5 años

          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', }
        Anibal Moises Garcia Moy

        Anibal Moises Garcia Moy

        student•
        hace 5 años

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

        Félix Andersson

        Félix Andersson

        student•
        hace 6 años

        Ese paquete esta bastante viejo y utiliza dependencias deprecadas

        Personalmente prefiero dejar el pre-render sin esas imagenes

          Jorge Iván Otero Vargas

          Jorge Iván Otero Vargas

          student•
          hace 5 años

          Deprecado != Deprecate

        Guillermo Andres Valenzuela Palencia

        Guillermo Andres Valenzuela Palencia

        student•
        hace 6 años

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

          Alan David R.L.

          Alan David R.L.

          student•
          hace 6 años

          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.

        Juan Carlos Pinzón

        Juan Carlos Pinzón

        student•
        hace 6 años

        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

        Nilson Diaz

        Nilson Diaz

        student•
        hace 5 años

        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() .

        Axlin Miranda

        Axlin Miranda

        student•
        hace 4 años

        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]', });
        john fredy quimbaya orozco

        john fredy quimbaya orozco

        student•
        hace 5 años

        sale el siguiente error

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

        TypeError: Cannot read property 'split' of undefined

        si alguien sabe como solucionar

        Jorge Méndez Ortega

        Jorge Méndez Ortega

        student•
        hace 5 años

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

          Massimo Di Berardino

          Massimo Di Berardino

          student•
          hace 5 años

          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

        john fredy quimbaya orozco

        john fredy quimbaya orozco

        student•
        hace 5 años

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

        TypeError: Cannot read property 'split' of undefined