我设置了一个代理来实现这一点:
您有一个常规的快速网络服务器,可以在任何路由上为 index.html 提供服务,除非它是资产路由。如果它是资产,则请求被代理到 web-dev-server
您的 react hot 入口点仍将直接指向 webpack 开发服务器,因此热重载仍然有效。
假设您在 8081 上运行 webpack-dev-server,在 8080 上运行您的代理。您的 server.js 文件将如下所示:
"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);
现在在 webpack 配置中创建你的入口点,如下所示:
entry: [
'./src/main.js',
'webpack/hot/dev-server',
'webpack-dev-server/client?http://localhost:8081'
]
注意直接调用 8081 进行 hotreload
还要确保将绝对 url 传递给output.publicPath
选项:
output: {
publicPath: "http://localhost:8081/assets/",
// ...
}