Ho impostato un proxy per ottenere questo:
Hai un server web espresso regolare che serve index.html su qualsiasi percorso, tranne se si tratta di un percorso di risorse. se si tratta di una risorsa, la richiesta viene inviata tramite proxy al web-dev-server
i punti di ingresso a caldo di React punteranno ancora direttamente al server di sviluppo webpack, quindi il ricaricamento a caldo funziona ancora.
Supponiamo che tu esegua webpack-dev-server su 8081 e il tuo proxy su 8080. Il tuo file server.js avrà questo aspetto:
"use strict";
var webpack = require('webpack');
var WebpackDevServer = require('webpack-dev-server');
var config = require('./make-webpack-config')('dev');
var express = require('express');
var proxy = require('proxy-middleware');
var url = require('url');
## --------your proxy----------------------
var app = express();
## proxy the request for static assets
app.use('/assets', proxy(url.parse('http://localhost:8081/assets')));
app.get('/*', function(req, res) {
res.sendFile(__dirname + '/index.html');
});
# -----your-webpack-dev-server------------------
var server = new WebpackDevServer(webpack(config), {
contentBase: __dirname,
hot: true,
quiet: false,
noInfo: false,
publicPath: "/assets/",
stats: { colors: true }
});
## run the two servers
server.listen(8081, "localhost", function() {});
app.listen(8080);
ora crea i tuoi punti di ingresso nella configurazione del webpack in questo modo:
entry: [
'./src/main.js',
'webpack/hot/dev-server',
'webpack-dev-server/client?http://localhost:8081'
]
notare la chiamata diretta al 8081 per hotreload
assicurati anche di passare un URL assoluto output.publicPath
all'opzione:
output: {
publicPath: "http://localhost:8081/assets/",
// ...
}