with open hot for development dev content javascript node.js webpack webpack-dev-server webpack-dev-middleware

javascript - open - Webpack vs webpack-dev-server vs webpack-dev-middleware vs webpack-hot-middleware vs etc.



webpack dev server-- mode development (2)

Estoy empezando a trabajar con webpack con un entorno de node/express desarrollando una aplicación renderizada del lado del servidor ReactJS con react-router . Me estoy confundiendo mucho sobre el papel de cada paquete webpack para entornos de desarrollo y producción (tiempo de ejecución).

Aquí está el resumen de mi comprensión:

webpack : es un paquete, una herramienta para unir diferentes piezas de una aplicación web y bundle.js en un solo archivo .js (normalmente bundle.js ). El archivo de resultados se sirve en un entorno prod para ser cargado por la aplicación y contiene todos los componentes necesarios para ejecutar el código. Las características incluyen reducción de código, minificación, etc.

webpack-dev-server : es un paquete que ofrece un servidor para procesar los archivos del sitio web. También crea un único archivo .js ( bundle.js ) a partir de componentes del cliente, pero lo sirve en la memoria. También tiene la opción ( -hot ) para monitorear todos los archivos de construcción y construir un nuevo paquete en memoria en caso de cambios de código. El servidor se sirve directamente en el navegador (por ejemplo: http:/localhost:8080/webpack-dev-server/whatever ). La combinación de carga en memoria, procesamiento en caliente y servicio del navegador permite al usuario actualizar la aplicación en el navegador cuando cambia el código, ideal para el entorno de desarrollo.

Si tengo dudas sobre el texto anterior, realmente no estoy seguro sobre el contenido a continuación, así que avíseme si es necesario

Un problema común cuando se usa webpack-dev-server con node/express es que webpack-dev-server es un servidor, al igual que node/express . Eso hace que este entorno sea difícil de ejecutar tanto el cliente como algún código de nodo / expreso (una API, etc.). NOTA: Esto es a lo que me he enfrentado, pero sería genial entender por qué sucede eso con más detalles ...

webpack-dev-middleware : es un middleware con las mismas funciones que el webpack-dev-server (agrupación inmemory, recarga en caliente), pero en formato que puede inyectarse en el server/express aplicación server/express . De esa manera, tiene una especie de servidor (el webpack-dev-server ) dentro del servidor de nodo. Oops: ¿Es este un sueño loco? ¿Cómo puede esta pieza resolver la ecuación de desarrollo y producción y simplificar la vida?

webpack-hot-middleware : Esto ... atascado aquí ... encontró esta pieza al buscar webpack-dev-middleware ... No tengo idea de cómo usarlo.

NOTA FINAL: Lo siento, hay algún pensamiento erróneo. Realmente necesito ayuda para entender estas variantes en un entorno complejo. Si es conveniente, agregue más paquetes / datos que construirán todo el escenario.


webpack

Como ha descrito, Webpack es un paquete de módulos, agrupa varios formatos de módulos principalmente para que puedan ejecutarse en un navegador. Ofrece tanto una CLI como una API de nodo .

webpack-dev-middleware

Webpack Dev Middleware es middleware que se puede montar en un servidor express para servir la última compilación de su paquete durante el desarrollo. Esto utiliza la API Node de webpack en modo de observación y, en lugar de enviarla al sistema de archivos, la envía a la memoria .

A modo de comparación, puede usar algo como express.static lugar de este middleware en producción.

webpack-dev-server

Webpack Dev Server es en sí mismo un servidor express que utiliza webpack-dev-middleware para servir el paquete más reciente y además maneja las solicitudes de reemplazo de módulos activos (HMR) para actualizaciones de módulos en vivo en el cliente.

webpack-hot-middleware

Webpack Hot Middleware es una alternativa a webpack-dev-server pero en lugar de iniciar un servidor en sí mismo, le permite montarlo en un servidor express existente / personalizado junto con webpack-dev-middleware .

También...

webpack-hot-server-middleware

Solo para confundir aún más las cosas, también hay Webpack Hot Server Middleware, que está diseñado para usarse junto con webpack-dev-middleware y webpack-hot-middleware para manejar el reemplazo de módulos en caliente de las aplicaciones renderizadas del servidor.


A partir de la actualización en 2018 y considerando la nota de webpack-dev-server en su página oficial de GitHub:

Proyecto en mantenimiento Tenga en cuenta que webpack-dev-server está actualmente en modo de solo mantenimiento y no aceptará ninguna característica adicional en el corto plazo. La mayoría de las solicitudes de funciones nuevas se pueden realizar con el middleware Express; por favor considere usar los ganchos antes y después en la documentación.

¿Cuál sería la elección natural para construir un HMR webpack?