CursosEmpresasBlogLiveConfPrecios

Usando Nodemon y Dotenv

Clase 6 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:12 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:17 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

    Viendo ahora
  • 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:14 min
  • 12
    Hydrate y estado de Redux desde Express

    Hydrate y estado de Redux desde Express

    09:17 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:54 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

      Comentarios

      Alver Alexander Grisales Ortega

      Alver Alexander Grisales Ortega

      student•
      hace 6 años
        Carlos Sampol

        Carlos Sampol

        student•
        hace 6 años
        Alver Alexander Grisales Ortega

        Alver Alexander Grisales Ortega

        student•
        hace 6 años
      Cristian Fabian Tovar

      Cristian Fabian Tovar

      student•
      hace 6 años
        Robinson De La Cruz

        Robinson De La Cruz

        student•
        hace 6 años
      Sergio Perez

      Sergio Perez

      student•
      hace 6 años
        Andres David Sanchez

        Andres David Sanchez

        student•
        hace 5 años
      José Manuel Puicón Rodas

      José Manuel Puicón Rodas

      student•
      hace 6 años
      Wilson Fernando Antury Torres

      Wilson Fernando Antury Torres

      student•
      hace 6 años
      Garcia Gar

      Garcia Gar

      student•
      hace 6 años
        Luis Lira

        Luis Lira

        student•
        hace 6 años
      Esteban Martini

      Esteban Martini

      student•
      hace 5 años
      Tomas Matus

      Tomas Matus

      student•
      hace 5 años
        Héctor Eduardo López Carballo

        Héctor Eduardo López Carballo

        student•
        hace 5 años
      Antony Jose Cabeza Rauseo

      Antony Jose Cabeza Rauseo

      student•
      hace 5 años
      Naldo Duran

      Naldo Duran

      student•
      hace 5 años
      Cesar Eliezer Gomez Gutierrez

      Cesar Eliezer Gomez Gutierrez

      student•
      hace 5 años
      Ever Alfredo Sorto Ayala

      Ever Alfredo Sorto Ayala

      student•
      hace 5 años
      Lluis Pitarch Ripolles

      Lluis Pitarch Ripolles

      student•
      hace 6 años
      Carlos Enrique Ramírez Flores

      Carlos Enrique Ramírez Flores

      student•
      hace 6 años
      Neryt Alexander Herrera Iñiguez

      Neryt Alexander Herrera Iñiguez

      student•
      hace 6 años
      Rodrigo Esgueva Ordóñez

      Rodrigo Esgueva Ordóñez

      student•
      hace 6 años
        Rodrigo Esgueva Ordóñez

        Rodrigo Esgueva Ordóñez

        student•
        hace 6 años
      Jose Daniel Molina

      Jose Daniel Molina

      student•
      hace 6 años
      Gaspar Dolcemascolo

      Gaspar Dolcemascolo

      student•
      hace 5 años
      Armando Chindoy

      Armando Chindoy

      student•
      hace 5 años
      Cristofher Jumbo Jimenez

      Cristofher Jumbo Jimenez

      student•
      hace 5 años

      Mi aporte:

      Crear un archivo index.js en una carpeta nueva llamada config dentro de server

      import dotenv from 'dotenv'; dotenv.config(); const { ENV, PORT } = process.env; export default { env: ENV, port: PORT, }

      y en server.js solo llamo esa configuración

      import express from 'express'; import config from './config'; const { env, port } = config; const app = express(); if (env === 'development') { console.log(env); } app.get('*', (req, res) => { console.log('hola man') res.send({ hello: 'express'}).end(); }); app.listen(port, (err) => { if (err) console.log(err); else console.log(`Server running on port ${port}`); });

      Excelente aporte, de hecho usarlo asi es la manera mas limpia porque solo lo defines una vez.

      si es una buena manera de modularizar las cosas

      Para que más adelante no haya inconvenientes para correr este proyecto en otra máquina o que se esté corriendo este proyecto en un commit posterior, es buena práctica dejar un .env.example para recordarle al desarrollador qué configuraciones de variables de entorno debe tener el proyecto

      Si, buen aporte. Como el archivo .env no se debe subir al repositorio, se crea el .env.example indicando los parametros sin valores.

      PORT= ENV=

      Comparto mis notas, con algunos aportes agregados. Agradezco feedback:

      • Nodemon: nodemon es una herramienta que ayuda a desarrollar aplicaciones. Cuando se detecten cambios de archivo en el directorio Nodemon reiniciara automáticamente la aplicación de node.

        npm install nodemon --dev
      • Teniendo instalado nodemon, podemos utilizarlo en nuestro script de desarrollo en el archivo de package.json

        "start:dev": "nodemon src/server/index"
      • Dotenv: es un modulo de dependencia que carga variables de entorno desde un archivo .env para utilizarlas con process.env. esto permite que podamos tener la configuración del entorno almacenada y separada del código

        npm install dotenv
      • para configurar dotenv tenemos que crear el archivo .env que es donde irán todas nuestras variables de entorno

        ENV=development // Entorno de desarrollo en el cual estaremos trabajando PORT=3000 // Puerto donde sera ejecutada la aplicacion
      • Es buena practica crear un archivo de configuración para eso , creamos un nuevo directorio llamado config y creamos un archivo llamado index.js. que tendrá lo siguiente:

        require('dotenv').config(); //requerimos dotenv a la vez que ejecutamos la funcion config const config = { // Definimos un objeto config //llamamos la variable ENV desde el process.env y hacemos una validacion de seguridad // para indicar que no estemos en modo de producción env: process.env.ENV !== 'production', // de igual forma llamamos al puerto port: process.env.PORT, }; //exportamos el objeto config module.exports = { config };
      • En nuestro archivo de server.js importamos nuestro archivo de configuración que será el modulo donde están toda nuestra configuración de variables de entorno

        const { config } = require('./config');
      • quedando server.js de la siguiente forma:

        import express from 'express' //importamos el archivo config con las variables const { config } = require('./config'); const app = express(); //validación que sí estemos en desarrollo if(config.env === 'development'){ console.log('Development config'); } app.get('*', (req, res) => { res.send({ hello: 'express' }); }); app.listen(config.port, (err) => { if (err) console.error(); else console.log(`Server running on port: ${config.port}`); })

      excelente aporte. agrego que es util crear un .env.example y subirlo al repositorio, este nos ayudara a recordar que vaiables debemos definir para correr nuestra aplicacion. Como el archivo original .env no se versiona, el de ejemplo nos ayudara

      console.log(server running in mode ${ENV} on port ${PORT});

      Las variables de entorno son muy útiles para no exponer data sensible, como credenciales de conexión a bases de datos.

      Hola a todos tengo una duda como puedo configurar dos archivos .env.dev .env.prod y poder acceder desde el server de express

      Gracias

      ¡Hola!

      Para realizar eso lo que tienes que hacer es pasar el path de tu archivo en variables de entorno dentro de un objeto en el método config. De la siguiente manera:

      require('dotenv').config({ path: './.env.prod' }) console.log(process.env.PORT)

      La lógica de cuál usar ya sería algo que tienes que definir tú. En qué se basará para usar el .env.dev o el .env.prod

      a esta altura me surge la siguiente duda, la configuracion de babel require en el archivo index, es principalmente para usar la forma de import de ES Modules en vez de los modulos de node que son por defecto

      const modulo = require('modulo')

      es asi?

      nodemon con wsl2 funciona muy lento, alguien sabe como solucionarlo?

      Hola!

      Dónde almacenas tus archivos? Tienes WSL 1 o 2? WSL2 está optimizado para leer los archivos directo desde Linux y es comun ver gente que tiene este problema corriendo los archivos de Windows.

      Excelente explicacion

      ✌

      Como les permite usar el ( import express from 'express' ) sin obtener un error? A mi solo me deja usar el require

      como se llama el plugin para que salga el tag en las funciones ?

      Interesante también que nos muestre la consola en que puerto estamos escuchando

      console.log(`Server is running in port ${PORT}`);

      Instalamos la dependencia nodemon para actualizar el server con cada cambio del código del back

      nodemon

      npm i nodemon

      Recomendacion personal:

      app.set('port', process.env.PORT || 3000)
      app.listen(app.get('port'), (err) => { console.log(`Server on port ${app.get('port')}`) })

      DEPRECATED:

      npm i nodemon --dev

      RECOMIENDO

      npm i nodemon --only=dev

      PERDON ESTA ES LA BUENA

      npm i nodemon -D

      Es recomendable tener un archivo .env.example para indicar a futuros colaboradores qué variables de entorno utiliza el proyecto. Importante también nunca subir el archivo .env a un repositorio, ya que dejaríamos la información sensible expuesta

      Recuerden que .env nunca debe subirse al repositorio. También recuerden crear el archivo .env.example, este si se sube y es una guía para otros devs de que variables se necesitan

      CONFIG ENV= PORT=

      Por lo que usamos babel no hay inconveniente a la hora de usar

      import {function,variable} from dependencia

      aunque tambien podriamos usar "require" para traernos modulos propios o dependencias

      Instalamos nodemon -D para no tener que escribir el script en cada cambio (como el hot reload del frontend) dotenv para poder guardar variables en el entorno del projecto y hacer escalable el projecto (significa dar flexibilidad al proyecto, es decir cambios ha futuro no romperar la App) :green_heart: