Meine Dateistruktur ist:
dist
css
style.css
index.html
js
bundle.js
src
css
style.css
index.html
js
main.js
node_modules
webpack.config.js
package.json
Mein webpack.config.js sieht folgendermaßen aus:
module.exports = {
entry: './src/js/main.js',
output: {
path: __dirname,
filename: './dist/js/bundle.js'
},
module: {
loaders: [
{
test: /\.js$/,
exclude: /(node_modules)/,
loader: 'babel',
query: {
presets: ['es2015']
}
},
{
test: /\.vue$/,
loader: 'vue'
}
]
}
};
Ich renne:
webpack-dev-server --content-base dist --hot
Und es baut und scheint zu funktionieren. localhost: 8080 zeigt das erwartete Ergebnis, aber Hot-Reload funktioniert einfach nicht. Wenn ich eine Datei ändere, kann ich im Terminal sehen, dass eine Neuerstellung stattfindet, aber im Browser nichts passiert. Fehlt mir etwas in der config?
Bei Verwendung von webpack-dev-server
werden alle Dateien intern erstellt, und nicht spuckt sie in den Ausgabepfad aus. Wenn Sie nur webpack
ohne den dev-Server ausführen, wird die eigentliche Kompilierung auf die Festplatte ausgeführt. Der dev-Server macht alles im Speicher, was die Neukompilierung erheblich beschleunigt.
Um Ihr Hot-Reload-Problem zu beheben, setzen Sie die Inhaltsbasis auf Ihr Quellverzeichnis und aktivieren Sie inline-mode
So wie:
webpack-dev-server --content-base src --hot --inline
Was für mich funktioniert hat, ist, <script src="bundle.js">
und nicht <script src="dist/bundle.js">
in meine index.html
-Datei zu schreiben.
// index.html
<script src="bundle.js"></script> // works
<script src="dist/bundle.js"></script> // doesn't work!
Das Beibehalten von dist/bundle.js
als Ausgabedatei funktioniert einwandfrei, wenn Sie es einfach mit webpack
erstellen. Bei Verwendung von webpack-dev-server
wird jedoch die statische Datei, die sich bereits im Dateisystem befindet, weiterhin bereitgestellt, und nicht der neueste Hot-Ersatz. Es scheint, dass webpack-dev-server
verwirrt wird, wenn dist/bundle.js
in der html-Datei angezeigt wird und diese nicht heiß ersetzt, obwohl webpack.config.js
für diesen Pfad konfiguriert ist.
--inline --hot war für mich kein Problem
Wenn Sie Redux verwenden, können Sie dies versuchen.
Aus irgendeinem zufälligen Grund erlaubte redux-devtools
kein Hot-Reload für mich. Versuchen Sie es aus der Root-Komponente und redux compose
config zu entfernen.
Hinweis: Verwenden Sie die redux devtool Browsererweiterung mit dieser Konfiguration in Ihrer Shop-Konfiguration: window.devToolsExtension ? window.devToolsExtension() : f => f
Muss auch lesen: https://medium.com/@rajaraodv/webpacks-hmr-react-hot-loader-the-missing-manual-232336dc0d96#.ejpsmve8f
Oder versuchen Sie Hot Reload 3: Beispiel: https://github.com/gaearon/redux-devtools/commit/64f58b7010a1b2a71ad16716eb37ac1031f93915
Das heiße Nachladen von Webpacks funktionierte für mich ebenfalls nicht mehr. Die Lösung für mich war, den Ordner node_modules
zu löschen und alle Abhängigkeiten neu zu installieren. Öffnen Sie einfach den übergeordneten Ordner von node_modules
in Ihrem Terminal und führen Sie npm install
aus.
100% Arbeitslösung
Sie müssen nur 3 Schritte befolgen und erhalten das heiße Nachladen wie erwartet
Deine Config sollte so aussehen -
output: { path: __dirname, publicPath:"/dist/js/", filename: './dist/js/bundle.js' }
devServer:{ contentBase:"/src/", inline:true, stats:"errors-only" }
Bitte beachten Sie, dass contentBase auf den Pfad zeigen sollte, in den Sie Ihre index.html-Datei einfügen, die Ihr Skript-Tag enthält. In Ihrem Fall wird dies "/ src /" sein.
<script src="http://localhost:portnumber + value in publicPath + bundle.js"></script>
in Ihrem Fall wird es so aussehen -
<script src="http://localhost:8080/js/dist/bundle.js" type="text/javascript"></script>
Und schließlich denken Sie daran, webpack-dev-server doesn't compile your js file or make build or watch on your js
-Datei, es wird alles in den Speicher geschrieben, um sich Ihre js-Datei anzusehen, die Sie ausführen müssenwebpack --watch
im seprate-Fenster
Überprüfen Sie Ihre Konsolenprotokolle, wenn der Fehler unter dem folgenden Fehler liegt, und fügen Sie der Webpack Dev Server-Datei cors hinzu
No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin react hot reload
Fügen Sie im Idealfall den folgenden Eintrag in Ihrem dev-Server hinzu
headers: { "Access-Control-Allow-Origin": "*" },
Versuche dies:
Löschen Sie in Ihrer package.json
-Datei die Zeile, die "test" "echo \"Error: no test specified\" && exit 1"
unter dem Skriptobjekt enthält, und ersetzen Sie sie durch
...
"scripts": {
"start": "webpack-dev-server --hot"
},
...
Um Ihr Projekt neu zu starten, verwenden Sie einfach npm start
.
Das hat für mich funktioniert, als ich auf dieses Problem gestoßen bin.
Bearbeiten: Können Sie Ihre package.json
-Datei freigeben?
Versuchen Sie auch, dies zu webpack.config.js hinzuzufügen
devServer: {
inline: true,
port: 3000,
hot: true
},
Keine der Optionen auf dieser Seite hat für mich funktioniert. Nachdem Sie den Abschnitt devServer geändert haben:
devServer: {
port: 8080,
contentBase: ['./src', './public'], // both src and output dirs
inline: true,
hot: true
},
es funktionierte.