1. Einleitung Wie wir alle wissen, kann die Verwendung von Hot Module Replacement (HMR) in Webpack die geänderten Module aktualisieren, wenn die Anwendung ausgeführt wird, ohne dass der Entwickler 2. GitHubGitHub 3. GrundkonfigurationDa wir für die Entwicklung das Vue-Framework verwenden (natürlich können auch andere Frameworks verwendet werden), sind zunächst einige Konfigurationen erforderlich. Projektverzeichnis Das Build-Verzeichnis enthält die Webpack-Konfigurationsdatei Paket.jsonEs versteht sich von selbst, dass der erste Schritt darin besteht, verschiedene Abhängigkeiten zu installieren. Die grundlegenden Abhängigkeiten sind wie folgt "devAbhängigkeiten": { "babel-core": "^6.26.3", "babel-loader": "^7.1.4", "babel-preset-env": "^1.7.0", "Umweltkreuz": "^5.1.6", "css-loader": "^0.28.11", "html-webpack-plugin": "^3.2.0", "Moment": "^2.22.2", "vue-loader": "^15.2.4", "vue-template-compiler": "^2.5.16", "webpack": "^4.11.1", "webpack-cli": "^3.0.3", "webpack-merge": "^4.1.2" }, "Abhängigkeiten": { "babel-polyfill": "^6.26.0", "vue": "^2.5.16" } webpack.config.jsErstellen Sie zur Sicherung eine neue webpack.config.js im Build-Verzeichnis. Diese Datei wird hauptsächlich als grundlegende Konfigurationsdatei für webpack verwendet. Im Allgemeinen unterscheiden wir zwischen dev (Entwicklung) und build (Produktion), aber einige Konfigurationen der beiden Situationen sind gleich, sodass das Erstellen einer öffentlichen Konfigurationsdatei die Codemenge reduzieren kann. Der Code in webpack.conf.js lautet wie folgt const path = require('Pfad'); const webpack = erfordern('webpack'); const-Paket = erforderlich('./../paket.json'); const VueLoaderPlugin = erfordern('vue-loader/lib/plugin'); const HtmlWebpackPlugin = erfordern('html-webpack-plugin'); const moment = erforderlich('Moment'); // Versionsnummer festlegen const buildVersion = moment().format('JJJJ-MM-TT_HH_mm_ss'); modul.exporte = { Eintrag: Pfad.join(__dirname, '../src/pages/main.js'), Ausgabe: { Pfad: Pfad.auflösen(__dirname, '../dist'), öffentlicher Pfad: '/', Dateiname: Paketname + '.js' }, Modul: { Regeln:[ { Test: /\.vue$/, Lader: „vue-loader“, Optionen: {} }, { Test: /\.css$/, verwenden: [ „Vue-Style-Loader“, „CSS-Lader“ ] }, { Test: /\.js$/, Lader: 'babel-loader', ausschließen: /node_modules/ } ] }, Plugins: [ neues VueLoaderPlugin(), neues HtmlWebpackPlugin({ Version: BuildVersion, Dateiname: 'index.html', Vorlage: Pfad.Join(__Dirname, '../src/pages/index.html'), injizieren: 'Körper' }) ], Äußerlichkeiten: { „babel-polyfill“: „Fenster“ }, devtool: „Quellkarte“ } Der Code ist einfach und nicht schwer zu verstehen Haupt-JSDiese Datei wird hauptsächlich zum Erstellen einer Vue-Instanz verwendet importiere 'babel-polyfill' Vue von „vue“ importieren App aus „../container/main.vue“ importieren neuer Vue({ el: '#app', rendern: h => h(App) }) HauptseiteDie Rolle der Vorlage spielen <!DOCTYPE html> <html> <Kopf> <meta charset="utf-8"> <Titel>Entwicklerserver HRM</Titel> <meta name="robots" content="alle" /> <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=0, minimum-scale=1.0, maximum-scale=1.0, viewport-fit=cover" /> <!-- Symbolleiste und Menüleiste anzeigen --> <meta name="apple-mobile-web-app-fähig" content="ja" /> <!-- Symbolleisten- und Menüleistenstile --> <meta name="apple-mobile-web-app-status-bar-style" content="schwarz" /> <!-- Optimiert für Handheld-Geräte, vor allem für einige alte Browser, die das Ansichtsfenster nicht erkennen, wie z. B. BlackBerry--> <meta name="HandheldFriendly" content="true" /> <!-- Nummern auf der Seite ignorieren und als Telefonnummern identifizieren--> <meta name="format-detection" content="telefon=nein" /> </Kopf> <Text> <div id="app"></div> </body> </html> Haupt-VueWird hauptsächlich verwendet, um zu testen, ob Hot Loading erfolgreich ist 4.webpack-dev-serverWebpack kann mithilfe von webpack-dev-server einen lokalen Server erstellen, der einem kleinen Express entspricht, und wir können damit Hot-Loading implementieren Paket.jsonNach der Installation von webpack-dev-server müssen wir das Skriptfeld in package.json konfigurieren "Skripte": { "dev": "umgebungsübergreifende NODE_ENV=Entwicklung webpack-dev-server --config build/dev.config.js", "Build": "Umgebungsübergreifende NODE_ENV=Produktions-Webpack-Entwicklerserver --config Build/Build.config.js", "test": "echo \"Fehler: kein Test angegeben\" && exit 1" } Es ist zu beachten, dass wir Umgebungsvariablen plattformübergreifend über Cross-Env festlegen und verwenden können. Wir verwenden es, um festzulegen, ob es sich um Entwicklung oder Produktion handelt. dev.config.jsErstellen Sie eine neue dev.config.js im Build-Verzeichnis als Webpack-Konfigurationsdatei für dev const webpack = erfordern('webpack') const config = erfordern('./webpack.config.js') // Variablen, die beginnend mit webpack4 config.mode = "development" konfiguriert werden müssen; config.devServer = { historyApiFallback:true, // Der Hot-Parameter steuert, ob das Update die gesamte Seite aktualisiert oder nur eine Teilaktualisierung erfolgt. Hot: true, // Inline ist ein Hot-Update-Modus, der andere ist Iframe inline: wahr, Anschluss: 80 } // Achten Sie darauf, HotModuleReplacementPlugin hinzuzufügen config.plugins.push( neues webpack.HotModuleReplacementPlugin() ) // Muss module.exports = config exportieren; Beenden Führen Sie webpack-dev-server verwendet WebSocket, um Aktualisierungsinformationen an den Browser zu senden 5.webpack-dev-middleware + webpack-hot-middlewareZusätzlich zur Verwendung von webpack-dev-server können wir auch webpack-dev-middleware + webpack-hot-middleware verwenden, um Hot Reload zu erreichen, aber keines dieser beiden Module verfügt über Serverfunktionen, wir müssen auch Express installieren Paket.jsonEbenso müssen Sie nach der Installation aller Abhängigkeiten das Skriptfeld in package.json konfigurieren "Skripte": { "dev": "cross-env NODE_ENV=Entwicklungsknoten ./build/dev.config.js", "Build": "Cross-Env NODE_ENV = Produktionsknoten ./Build/build.config.js", "test": "echo \"Fehler: kein Test angegeben\" && exit 1" }, dev.config.jsMit dieser Lösung muss dev.config.js mehr Code schreiben const app = require('express')(); const webpack = erfordern("webpack"); const webpackDevMiddleware = erforderlich("webpack-dev-middleware"); const webpackHotMiddleware = erforderlich("webpack-hot-middleware"); const path = require("Pfad"); let config = require("./webpack.config") config.mode = "Entwicklung"; // Sehr wichtig config.entry = [config.entry,'webpack-hot-middleware/client']; config.plugins.push( neues webpack.HotModuleReplacementPlugin(), // Wenn HMR aktiviert ist, zeigt dieses Plugin den relativen Pfad des Moduls an. Es wird für die Entwicklungsumgebung empfohlen: new webpack.NamedModulesPlugin() ) const compiler = webpack(konfiguration); // Verwenden von Dev-Middleware und Hot-Middleware const devMiddleware = webpackDevMiddleware(Compiler, { öffentlicher Pfad: config.output.publicPath, ruhig: stimmt }) const hotMiddleware = webpackHotMiddleware(Compiler, { log: falsch, Herzschlag: 2000 }) app.use(devMiddleware); app.use(hotMiddleware); app.listen(80); Im Gegensatz zu webpack-dev-server haben die beiden hier verwendeten Module keine Serverfunktionen. Daher können wir den Dienst nur mit Express starten. Beenden Führen Sie In diesem Fall verwendet Webpack EventSource, um mit dem Browser zu kommunizieren. Im Gegensatz zur bidirektionalen Kommunikation von WebSocket kann EventSource nur vom Server zum Client kommunizieren. Damit ist dieser Artikel über verschiedene Möglichkeiten zur manuellen Implementierung von HMR mit Webpack abgeschlossen. Weitere verwandte Webpack-HMR-Inhalte finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen! Das könnte Sie auch interessieren:
|
<<: Zusammenfassung der MySQL-Tabellen- und Spaltenkommentare
Der erste Schritt besteht darin, das entsprechend...
MySQL effiziente Abfrage MySQL verzichtet auf „Gr...
Mithilfe von Nginx-Protokollen lassen sich Benutz...
1. VMware herunterladen und installieren Verknüpf...
<br />Originaltext: http://jorux.com/archive...
Ich arbeite derzeit an einem eigenen kleinen Prog...
Websites ohne https-Unterstützung werden von Brow...
Nach vielen schwierigen Einzelschritt-Debuggings ...
Dieser Artikel veranschaulicht anhand von Beispie...
Lösung für das Problem, dass das Ubuntu-Dualsyste...
Hintergrund: Manchmal müssen wir JSON-Daten direk...
Schauen Sie sich zuerst den Code und die Wirkung ...
Inhaltsverzeichnis Vorwort Text 1. Panel 2. Huaro...
Laden Sie zuerst die Version 15.1 von VMware Work...
Prinzip Setzen Sie beim Schweben einen Schatten a...