Casi todos los sistemas de compilación eligen usar el mecanismo de reloj para resolver el problema de generar repetidamente archivos posteriores a la construcción durante el desarrollo. Sin embargo, bajo el mecanismo de reloj, tenemos que soportar el problema de modificar el código durante mucho tiempo y tener que beber un sorbo de té después de guardar el código antes de actualizar y ver el efecto. Aquí tratamos de explorar por qué ver no es una bala plateada e intentamos encontrar una mejor solución a este problema.
Hechos basados en el reloj
Cuando se modifica un archivo, podemos conocer las modificaciones del archivo que pueden ser causadas por su modificación, por lo que simplemente reconstruya estos archivos.
Por lo general, para el archivo A, la relación correspondiente es muy precisa en la construcción de un escenario como el archivo B. Pero en escenarios reales, el proceso de construcción a menudo no es tan simple. Por ejemplo:
Archivo A + Archivo B (referenciado por el archivo A) -> Archivo C
En este escenario, cuando se modifica el archivo B, puede ser difícil localizar qué archivos deben volver a sintiendo la tarea de construcción, porque muchos archivos pueden referirse al archivo B.
A menos que construamos un árbol de dependencia y actualicemos el árbol de dependencia cada vez que se actualiza el archivo, y active la construcción de archivos en función del nuevo árbol de dependencia. Pero esto requiere que todos los complementos implementen este mecanismo por sí solo y es extremadamente propenso a errores. Por lo tanto, de hecho, el mecanismo de reloj simplemente vuelve a ejecutar toda la tarea. Entonces, a medida que el proyecto se haga más grande, el mecanismo de reloj se volverá más lento y más lento (porque cada vez más archivos deben volver a ejecutar todo el proceso, incluso si el caché se reduce al reducir el tiempo requerido para todo el proceso).
Solución
SRC está disponible directamente
AlloyTeam y @ldjking, simplemente coloque SRC directamente y coloque las tareas de compilación en el lado del navegador, o incluso no construir en absoluto. No solo puede modificarse y actualizarse en el tiempo, sino también reducir el consumo de tiempo durante el proceso de desarrollo. La construcción fuera de línea solo es responsable de los problemas de optimización del rendimiento y no de la eficiencia del desarrollo.
Los representantes típicos incluyen menos, reaccionar, etc. Pero hay algunos problemas:
Es difícil implementar métodos de construcción elegantes en el lado del navegador, y es difícil proporcionar funciones poderosas para reducir aún más los costos de desarrollo. La mayoría de ellos solo pueden introducir scripts de manera similar a <style type = "text/menos"> </style> camino.
La orden de ejecución en el modo de desarrollo no es necesariamente la misma que el escenario real, lo que puede conducir a errores invisibles. Por ejemplo, la implementación de un HTML en línea es asíncrono, pero en el modo de liberación se sincroniza, lo que resulta en errores inexplicables.
El rendimiento de la compilación del navegador es preocupante, como la versión JS de Sass, y la velocidad de compilación es casi insoportable.
Es necesario mantener dos conjuntos de sistemas de construcción en línea y fuera de línea, lo que aumenta el costo del desarrollo de herramientas.
Construcción dinámica del servidor local
Un hecho es: con soporte de especificación razonable, podemos volver al archivo de entrada solicitado por el navegador al archivo que se construyó durante el archivo. De esta manera podemos activar dinámicamente un proceso de compilación.
Al establecer un servidor localmente, deje que el servidor capture la solicitud y la construya dinámicamente en el servidor. Mientras volvamos al archivo de entrada, podemos arrojar el archivo de entrada a la tubería compuesta por Gulp Plug-in, y la salida es el archivo requerido por el navegador.
De esta manera podemos resolver todos los problemas anteriores.