Presque tous les systèmes de construction choisissent d'utiliser le mécanisme de surveillance pour résoudre le problème de la génération de fichiers post-construction à plusieurs reprises pendant le développement. Cependant, sous le mécanisme de surveillance, nous devons supporter le problème de la modification du code pendant longtemps, et de devoir boire une gorgée de thé après avoir enregistré le code avant de rafraîchir et de voir l'effet. Ici, nous essayons d'explorer pourquoi Watch n'est pas une solution miracle et essayer de trouver une meilleure solution à ce problème.
Faits basés sur la montre
Lorsqu'un fichier est modifié, nous pouvons connaître les modifications du fichier qui peuvent être causées par sa modification, alors reconstruisez ces fichiers.
Habituellement, pour le fichier A, la relation correspondante est très précise pour construire un scénario comme le fichier B. Mais dans des scénarios réels, le processus de construction n'est souvent pas aussi simple. Par exemple:
Fichier A + Fichier B (référencé par le fichier A) -> Fichier C
Dans ce scénario, lorsque le fichier B est modifié, il peut être difficile de localiser quels fichiers doivent rediffuser la tâche de construction, car de nombreux fichiers peuvent se référer au fichier B.
Sauf si nous construisons une arborescence de dépendance et mettons à jour l'arborescence de dépendance à chaque fois que le fichier est mis à jour et déclenchez la création de fichiers en fonction du nouvel arborescence de dépendance. Mais cela nécessite chaque plug-in pour implémenter ce mécanisme par lui-même et est extrêmement sujet aux erreurs. Par conséquent, en fait, le mécanisme de surveillance relance toute la tâche. Ainsi, à mesure que le projet s'agrandit, le mécanisme de surveillance deviendra de plus en plus lent (car de plus en plus de fichiers doivent relancer l'ensemble du processus, même si le cache est réduit en réduisant le temps requis pour l'ensemble du processus).
Solution
SRC est disponible directement
ALLOYTEAM & @LDJKING, mettez simplement SRC directement et mettez les tâches de construction du côté du navigateur, ou même ne construisez pas du tout. Il peut non seulement modifier et se rafraîchir dans le temps, mais également réduire la consommation de temps pendant le processus de développement. La construction hors ligne n'est responsable que des problèmes d'optimisation des performances et non de l'efficacité du développement.
Les représentants typiques incluent moins, réagir, etc. Mais il y a quelques problèmes:
Il est difficile de mettre en œuvre des méthodes de construction élégantes du côté du navigateur, et il est difficile de fournir des fonctions puissantes pour réduire davantage les coûts de développement. La plupart d'entre eux ne peuvent introduire que des scripts de la même manière que <style type = "text / moins"> </ style>.
L'ordre d'exécution en mode développement n'est pas nécessairement le même que le scénario réel, ce qui peut conduire à des bogues invisibles. Par exemple, la mise en œuvre d'un HTML en ligne est asynchrone, mais en mode de libération est synchronisée, ce qui entraîne des bogues inexplicables.
Les performances de compilation du navigateur sont inquiétantes, comme la version JS de SASS, et la vitesse de compilation est presque insupportable.
Il est nécessaire de maintenir deux ensembles de systèmes de construction en ligne et hors ligne, ce qui augmente le coût du développement des outils.
Construction dynamique du serveur local
Un fait est: avec un support de spécification raisonnable, nous pouvons revenir au fichier d'entrée demandé par le navigateur au fichier construit pendant le fichier. De cette façon, nous pouvons déclencher dynamiquement un processus de construction.
En établissant un serveur localement, laissez le serveur capturer la demande et le construire dynamiquement dans le serveur. Tant que nous retournons au fichier d'entrée, nous pouvons jeter le fichier d'entrée dans le pipeline composé du plug-in Gulp, et la sortie est le fichier requis par le navigateur.
De cette façon, nous pouvons résoudre tous les problèmes ci-dessus.