CursosEmpresasBlogLiveConfPrecios

Configurando webpack para producción

Clase 14 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

    04:15 min
  • 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

    Viendo ahora
  • 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
        Jaume Parrot Altisent

        Jaume Parrot Altisent

        student•
        hace 6 años

        Hola, no soy capax de cargar las imagenes de fuera de nuestro proyecto,

        Captura de pantalla 2020-08-09 a las 2.34.35.png

        ni tampoc el stado de redux:

        Captura de pantalla 2020-08-09 a las 2.35.55.png

        Antes de iba. El probado de hacer un copu&paste, del código del profesor, y nada. Si alguien me pudiera aydar, se lo agraceria un monton. Graciac

          Emanuel Catriquil

          Emanuel Catriquil

          student•
          hace 6 años

          Hola! Aparentemente es un problema con las dependencias. Me paso lo mismo y reemplace el package.json que había hecho por el que te podes descargar en la seccion de archivos y enlaces. Le das a npm i, después npm run build y después node src/server, si todo anda bien en el puerto 3001 deberías ver la app con imágenes y sin errores

          Jaume Parrot Altisent

          Jaume Parrot Altisent

          student•
          hace 6 años

          Correcto, el problema es la version del hemet, ahorra utilizo la misma version del curso, y me funciona

        Anibal Moises Garcia Moy

        Anibal Moises Garcia Moy

        student•
        hace 5 años

        yo utilicé esta configuración del contentSecurityPolicy

        else { app.use(express.static(`${__dirname}/public`)); app.use(helmet()); app.use( helmet.contentSecurityPolicy({ directives: { 'default-src': ["'self'"], 'script-src': ["'self'", "'sha256-lKtLIbt/r08geDBLpzup7D3pTCavi4hfYSO45z98900='"], 'img-src': ["'self'", 'http://dummyimage.com'], 'style-src-elem': ["'self'", 'https://fonts.googleapis.com'], 'font-src': ['https://fonts.gstatic.com'], 'media-src': ['*'], }, }), ); app.use(helmet.permittedCrossDomainPolicies()); app.disable('x-powered-by'); }```
          Cesar Andres Ardila Buitrago

          Cesar Andres Ardila Buitrago

          student•
          hace 5 años

          Muchas gracias Anibal, este funciona con la ultima version de helmet.

          Victor Baruch Pazaran Jaimes

          Victor Baruch Pazaran Jaimes

          student•
          hace 5 años

          muchas gracias, igual me funciono, aunque tuve que cambiar la clave sha por la que me aparecia en el error

        Julia Suárez

        Julia Suárez

        student•
        hace 5 años

        No es mejor mantener un webpack.config.js y un webpack.config.dev.js en vez de llenar el webpack de condicionales?

          Matthias Ignacio Clein Espinoza

          Matthias Ignacio Clein Espinoza

          student•
          hace 5 años

          Antes de empezar este curso terminé el nuevo curso de Webpack, así que también creo que era mejor opción generar dos archivos de webpack.config.

        Erick Avila Rojas

        Erick Avila Rojas

        student•
        hace 5 años

        Es todo un tema el usar Helmet ya que para el momento en que estoy tomando el curso la versión es 4.2.0 y cambiaron cosas que no funcionan con la manera en que se dicta en la clase. . Después de revisar documentación existen configuraciones extras que hay que hacer para que el middleware no agregue el header por default y bloquee la implementación que se está manejando hasta ahora. Dejo una copia de lo que hice. .

        carbon.png
        . De esta manera se agregan varias sentencias que permiten que el proyecto funcione como hasta ahora se a programado en la Escuela de JS. Cabe señalar que los hash necesarios para escapar los scripts inline que se maneja en el html y unos que uso en css para la fuente varían de acuerdo a su código. Estos los pueden copiar de los mensajes de error que arroja Chrome o buscar un generador de hash con el algoritmo sha256. . Con esto logré que funcionara en Chrome, Firefox y Opera. En Safari aún no lo logro porque alguno de los middlewares que usa Helmet choca con la configuración SSL del navegador. Si alguien tiene solución a ese problema agradecería nos lo compartiera. .

        PD. Intenté poner el código inline para que se pudiera copiar pero las políticas de Platzi borran mi comentario porque dice que tiene enlaces a sitios no seguros…

        . PD2. El comentario de arriba se supondría sería un h1, pero creo no funciona el markdown al igual que los saltos de línea.

        Fredy Sarmiento

        Fredy Sarmiento

        student•
        hace 6 años

        me gusta lo que voy aprendiendo, pero hay mucho por aprender a veces siento que estoy perdido y vuelvo a retomar. la cuestión esta en la voluntad y la disciplina de cada uno, vamos con toda

        Rulo Code

        Rulo Code

        student•
        hace 6 años

        Para no tener que estar cambiando el archivo .env podemos ponermos en modo production desde el script

        "build": "ENV=production webpack-cli --config webpack.config.js",
          Luis Lira

          Luis Lira

          student•
          hace 6 años

          En algunos casos habrá a personas que nos les funcionará el script de esta manera, pero pueden hacerlo usando esta librería de npm https://www.npmjs.com/package/cross-env

        Alfredo Mauricio Aguirre Catucuago

        Alfredo Mauricio Aguirre Catucuago

        student•
        hace 5 años

        Para la fecha que estoy tomando el curso, aun hay problemas con la configuración, pero el problema mas grande es el CACHE del navegador. Adicional a eso incluí una línea de código extra y todo fluye bien después de borrar el cache. Código que va luego de usar helmet:

        app.use( helmet({ contentSecurityPolicy: false, }), );
        Andres Caro

        Andres Caro

        student•
        hace 5 años

        Solucione el problema del webpack cambiandolo de verción ya que la veción actual no deja realizar el cambio

        npm i webpack-cli@3.3.10

        tambien cambie el build por sugerencia de un compañero

        "build": "ENV=production webpack-cli --config webpack.config.js",```
        mauricio garcia

        mauricio garcia

        student•
        hace 6 años

        Hola a todos. Al aplicar SSR y deshabilitar javascript debería seguir funcionando todo tal cual?

          José María Cuevas Ramírez

          José María Cuevas Ramírez

          student•
          hace 6 años

          No, ya que la aplicación depende completamente de JavaScript para funcionar.

          John Botero

          John Botero

          student•
          hace 6 años

          La idea de SSR es renderizar el html de la página mientras termina la carga del js, no es funcional hasta que termine.

        Carlos Alfonso Garcia Rivera

        Carlos Alfonso Garcia Rivera

        student•
        hace 5 años

        se ve bastante simple el proceso de enviar a produccion, mi pregunta es, ¿al servidor solo tendre que subir lo que esta en la carpeta public?

        Laura Camila Pregonero

        Laura Camila Pregonero

        student•
        hace 5 años

        Configuracion Webpack

        Juan Esteban Galvis

        Juan Esteban Galvis

        student•
        hace 5 años

        Me esta cargando el JS pero no el CSS 🙁 dejo pantallazo por si alguno sabe como solucionarlo:

        Captura de pantalla 2021-02-20 075330.jpg
          César Palma

          César Palma

          student•
          hace 5 años

          // This disables the contentSecurityPolicy middleware but keeps the rest. app.use( helmet({ contentSecurityPolicy: false, }) );

        Irungaray Agustin

        Irungaray Agustin

        student•
        hace 6 años

        Para que el aviso de Node al iniciar el servidor sea aún mas específico puede ser así:

        app.listen(port, (err) => { if (err) console.log(err) else console.log(`Servidor corriendo en modo ${env} en http://localhost:${port}`) })
        Beto Martinez

        Beto Martinez

        student•
        hace 6 años

        Se me cargaron dos Apps en el mismo body jajajaja

        Luis Carlos Kristen Ospitia

        Luis Carlos Kristen Ospitia

        student•
        hace 6 años

        tengo un problema y es que en development me va como una nave, pero me hace el build bien y cuando lo lanzo con Node, no me va, en el source de la pagina tampoco aparece que haya cargado nada, solo un (index)

        <!DOCTYPE html> <html> <head> <title>Platzi Video</title> </head> <body> <div id="app"></div> </body> </html>```
        Elvis Saavedra

        Elvis Saavedra

        student•
        hace 6 años

        A alguien más le falla si intenta cargar la página de un video? al navegar me funciona, si recargo la página me sale erro

        TypeError [ERR_INVALID_CALLBACK]: Callback must be a function. Received { '$$typeof': Symbol(react.element), type: [Function: Redirect] { propTypes: { push: [Function], from: [Function], to: [Function: bound checkType] } }, key: null, ref: null, props: { to: '/404' }, _owner: null, _store: {} }
        Nelson Cadenas

        Nelson Cadenas

        student•
        hace 6 años

        Excelente clase!!!! Tengo una inquietud, al momento de hacer la prueba deshabilitando Javascript del navegador y verificar si está funcionando el SSR, la aplicación se me despliega correctamente (obviamente para que la app me tome este cambio actualizo la app desde el navegador con F5). El detalle está cuando presiono los botones de la app, por ejemplo, el botón de play o el botón de agregar el video a mis favoritos. En el primer caso no me reproduce el video, solo una página que dice no encontrado y en blanco sin estilos. En el segundo caso, no me agrega el video a la lista de favoritos. Pregunto, esto es un comportamiento normal de la aplicación cuando se está haciendo el testeo del SSR (app sin un uso de javascript), porque a simple vista solamente me está desplegando la página principal de la app, pero están fallando todas las funcionalidades de la misma. Igualmente pasa con los formularios de login y register, al presionar los botones de enviar ambos formularios hacen refresh y listo, no hace el simulacro de inicio de sesión, solo se recargan en blanco.

          Ezequiel

          Ezequiel

          student•
          hace 6 años

          La reproducción de video, login y register no están implementadas en el proyecto, así que es normal que pase eso. Lo de agregar favoritos si debería funcionar. Chequea si hiciste clone de la rama correcta que es la de feature/router-redux

          mauricio garcia

          mauricio garcia

          student•
          hace 6 años

          tengo el msmo problema, pudiste saber la razon?

        Jose Daniel Molina

        Jose Daniel Molina

        student•
        hace 6 años

        Estoy trabajando a la par del curso con otro proyecto para aplicarle SSR... Hice el HotModuleReplacement con exito, y también estoy renderizando la app desde el server. El problema es el siguiente, mi app no maneja Redux sino que funciona con una API. Al momento de deshabilitar el javascript para probar el SSR se queda en el loader y no me muestra nada más. Yo lo atribuyo a que hay una llamada API y de ahí depende que se muestren items... Dejo imagenes para que se den una idea. Muchas gracias por cualquier ayuda :D

        Esta es la app normal, cada imagen se obtiene de la API.

        deberia.PNG

        Y esta es la app cuando deshabilito javascript

        js disabled.PNG

          Luis Lira

          Luis Lira

          student•
          hace 6 años

          Para eso lo que podrías hacer es que todo el llamado de la API lo hagas desde el server también, para esto puedes usar axios, y con la información que la API te regrese es con lo que crearás el template que se enviará al cliente desde el servidor.

          Jose Daniel Molina

          Jose Daniel Molina

          student•
          hace 6 años

          Entonces, al parecer estoy en lo correcto? es por la llamada a la API...

          Tomaré en cuenta tu consejo, muchas gracias :D

        Eduardo Garcia Garcia

        Eduardo Garcia Garcia

        student•
        hace 3 años

        Alguien sabes como configurar los CORS en el Server?? Quiero mandar a llamar una pagina dentro de un iframe y me marca errores de CORS, ¿existe alguna configuración dentro del Server que me recomienden para evitar este bloqueo?

        MARTIN RAMIREZ RAMIREZ

        MARTIN RAMIREZ RAMIREZ

        student•
        hace 4 años

        no encuentro como validar que nuestra aplicacion mande error de lado del servidor al momento de llamar a window?