Heim  >  Artikel  >  Web-Frontend  >  Welche Implementierungsmethoden gibt es für den Hot-Module-Austausch?

Welche Implementierungsmethoden gibt es für den Hot-Module-Austausch?

php中世界最好的语言
php中世界最好的语言Original
2018-05-02 11:05:001682Durchsuche

Dieses Mal werde ich Ihnen vorstellen, welche Implementierungsmethoden für den Austausch von Hot-Modulen gelten und welche Vorsichtsmaßnahmen für den Hot-Modul-Austausch gelten. Das Folgende ist ein praktischer Fall. Werfen wir einen Blick darauf.

Nach ein wenig Recherche habe ich festgestellt, dass es nicht allzu schwierig ist, dies in dem von angle/cli erstellten Projekt zu implementieren. Die Schritte sind wie folgt:

Erstellen Sie zuerst eine src/. Umgebungen/environment.hmr. ts Datei, der Inhalt ist wie folgt

export const environment = {
 production: false,
 hmr: true
};

Natürlich müssen die entsprechenden Environment.prod.ts und Environment.ts ein hmr:false hinzufügen.

Wenn Wenn hmr in der Datei „environment.ts“ auf „true“ gesetzt ist, hat ng servo --hmr ebenfalls den gleichen Effekt. Allerdings bin ich nicht so überzeugt von der Hot-Replacement-Funktion, die sicherstellen kann, dass der Status sauberer ist, daher habe ich hmr in Environment.ts auf „false“ gesetzt .angular – Fügen Sie die HMR-Umgebung zur Umgebung der Datei cli.json hinzu, ungefähr wie folgt:

"environments": {
 ...
 "hmr": "environments/environment.hmr.ts",
}

3. Fügen Sie einen neuen Befehl zu den Skripten von package.json hinzu. (Natürlich können Sie ng servo --hmr -e=hmr auch direkt ausführen, ohne es hinzuzufügen, was den gleichen Effekt hat wie das Ausführen von npm run hmr)

"scripts": {
 ...
 "hmr": "ng serve --hmr -e=hmr"
}

4 hmr-Modul, der Befehl lautet wie folgt:

npm install --save-dev @angularclass/hmr

5. Erstellen Sie die Datei srchmr.ts mit folgendem Inhalt:

import { NgModuleRef, ApplicationRef } from '@angular/core';
import { createNewHosts } from '@angularclass/hmr';
export const hmrBootstrap = (module: any, bootstrap: () => Promise<NgModuleRef<any>>) => {
 let ngModule: NgModuleRef<any>;
 module.hot.accept();
 bootstrap().then(currentModule => ngModule = currentModule);
 module.hot.dispose(() => {
  const appRef: ApplicationRef = ngModule.injector.get(ApplicationRef);
  const elements = appRef.components.map(c => c.location.nativeElement);
  const removeOldHosts = createNewHosts(elements);
  ngModule.destroy();
  removeOldHosts();
 });
};
Dies ist der Schlüssel zum Hot-Replacement (Wie Sie unten sehen werden). Wenn das Modul

aktualisiert wird

, entfernt hmr zuerst das alte Modul und erhält dann das neue Modul. Dies geschieht alles im Browser. Daher wird die Seite nicht aktualisiert.

6. Aktualisieren Sie die Datei srcmain.ts wie folgt:

import { enableProdMode } from '@angular/core';
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app/app.module';
import { environment } from './environments/environment';
import { hmrBootstrap } from './hmr';
if (environment.production) {
 enableProdMode();
}
const bootstrap = () => platformBrowserDynamic().bootstrapModule(AppModule);
if (environment.hmr) {
 if (module[ 'hot' ]) {
  hmrBootstrap(module, bootstrap);
 } else {
  console.error('Ammm.. HMR is not enabled for webpack');
 }
} else {
 bootstrap();
}
Der Ersatz hier erfordert die Startdatei. Wenn sie auf hmr eingestellt ist, rufen Sie hmrBootStrap auf, um die Webseite zu starten die Vergangenheit

7. Führen Sie nun npm run hmr oder ng Serve --hmr -e=hmr aus, um die Hot-Replacement-Funktion zu realisieren.

Ich glaube, dass Sie die Methode beherrschen, nachdem Sie den Fall in diesem Artikel gelesen haben. Weitere spannende Informationen finden Sie in anderen verwandten Artikeln auf der chinesischen PHP-Website!

Empfohlene Lektüre:

Angular5-Schritte-Anleitung zum Hinzufügen von Stilklassen zu Komponenten-Tags

So verwenden Sie Websocket in NodeJS ( mit Code)

So erhalten Sie das größte Element in einem Array vom Typ „Zahl“

Das obige ist der detaillierte Inhalt vonWelche Implementierungsmethoden gibt es für den Hot-Module-Austausch?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn