Fast alle Build-Systeme verwenden den Uhrenmechanismus, um das Problem der wiederholten Generierung von Dateien nach dem Bau während der Entwicklung zu lösen. Unter dem Uhrenmechanismus müssen wir jedoch das Problem der Änderung des Codes für lange Zeit ertragen und einen Schluck Tee trinken, nachdem er den Code gespeichert hatte, bevor er erfrischt und den Effekt angesehen hat. Hier versuchen wir zu untersuchen, warum Watch keine Silberkugel ist und versuchen, eine bessere Lösung für dieses Problem zu finden.
Fakten basierend auf der Uhr
Wenn eine Datei geändert wird, können wir die Dateiänderungen kennen, die durch ihre Änderung verursacht werden können.
Für die Datei A ist die entsprechende Beziehung normalerweise sehr genau, um ein Szenario wie Datei B. zu erstellen. In realen Szenarien ist der Konstruktionsprozess jedoch oft nicht so einfach. Zum Beispiel:
Datei A + Datei B (verwiesen nach Datei a) -> Datei c
In diesem Szenario kann es schwierig sein, die Konstruktionsaufgabe erneut zu finden, wenn Datei B geändert wird, da viele Dateien möglicherweise auf Datei B.
Sofern wir keinen Abhängigkeitsbaum erstellen, aktualisieren die Abhängigkeitsbaum jedes Mal, wenn die Datei aktualisiert wird, und das Erstellen von Dateien basierend auf dem neuen Abhängigkeitsbaum. Dies erfordert jedoch, dass jedes Plug-In diesen Mechanismus selbst implementiert, und ist äußerst fehleranfällig. Daher leistet der Uhrenmechanismus nur die gesamte Aufgabe aus. Wenn das Projekt größer wird, wird der Uhrenmechanismus immer langsamer (da immer mehr Dateien den gesamten Vorgang erneut ausführen müssen, auch wenn der Cache reduziert wird, indem die für den gesamten Vorgang erforderliche Zeit verkürzt).
Lösung
SRC ist direkt erhältlich
Alloyteam & @Ldjking, einfach SRC direkt einsetzen und die Build -Aufgaben auf die Browser -Seite setzen oder überhaupt nicht bauen. Es kann nicht nur zeitlich ändern und aktualisieren, sondern auch den Zeitverbrauch während des Entwicklungsprozesses reduzieren. Die Offline -Konstruktion ist nur für Probleme mit der Leistungsoptimierung und nicht für die Entwicklungseffizienz verantwortlich.
Typische Vertreter sind weniger, reagieren usw., aber es gibt einige Probleme:
Es ist schwierig, elegante Baumethoden auf der Browserseite umzusetzen, und es ist schwierig, leistungsstarke Funktionen zu liefern, um die Entwicklungskosten weiter zu senken. Die meisten von ihnen können nur Skripte auf ähnliche Weise wie <style type = "text/weniger"> </style> einführen.
Die Ausführungsreihenfolge im Entwicklungsmodus entspricht nicht unbedingt dem tatsächlichen Szenario, was zu unsichtbaren Fehler führen kann. Die Implementierung einer HTML -Inline ist beispielsweise asynchron, im Freigabemodus wird jedoch synchronisiert, was zu unerklärlichen Fehler führt.
Die Browser -Kompilierungsleistung ist besorgniserregend, wie die JS -Version von SASS, und die Kompilierungsgeschwindigkeit ist fast unerträglich.
Es ist notwendig, zwei Sätze von Online- und Offline -Bausystemen aufrechtzuerhalten, wodurch die Kosten für die Entwicklung von Werkzeugen erhöht werden.
Dynamische Konstruktion des lokalen Servers
Eine Tatsache ist: Mit einer angemessenen Spezifikationsunterstützung können wir zu der vom Browser angeforderten Eintragsdatei zurückkehren, um die während der Datei erstellte Datei zu erstellen. Auf diese Weise können wir einen Build -Prozess dynamisch auslösen.
Lassen Sie den Server die Anforderung erfassen und erstellen Sie sie dynamisch im Server. Solange wir zur Eintragsdatei zurückkehren, können wir die Eintragsdatei in die Pipeline aus dem Gulp-Plug-In streichen, und die Ausgabe ist die vom Browser erforderliche Datei.
Auf diese Weise können wir alle oben genannten Probleme lösen.