我们有多个索引文件,我们从webpack-dev-server服务器:
index.html = http://eventapp.localhost
site.html = http://eventsite.localhost
forms.html = http://regsites.localhost
我们在这些服务器前面有一个nginx代理服务器,用于https和http。当webpack客户端连接到sockjs-node
时,它似乎添加了端口并直接转到webpack-dev-server
而不是通过我们的nginx代理。因此,如果您通过SSL,HMR不起作用,因为我们不使用https启动服务器。
有没有办法告诉它在进行sockjs协商时不要附加端口,只是让它继续使用nginx代理?
这就是我们配置服务器的方式:
devServer: {
host: '0.0.0.0',
/// Enable gzip
compress: true,
contentBase: './dist',
/* Theoretically, the public option is better but they only support a single host
*
* This is a security issue not using public.
* */
disableHostCheck: true,
// Do not enable HMR on the server, it is enabled with --hot
// hot: true,
before: (app) => {
/* Serve the dev settings that are normally injected via nginx */
app.get('/settings.js', function (req, res) {
const fullPath = path.join(__dirname, settingsFile);
res.sendFile(fullPath);
});
app.use(historyFallback({verbose: false}));
},
},
这就是我们推出它的方式:
webpack-dev-server --hot-only --hot --env.BUILD_VERSION=development
我们正在使用来自react-dev-utils/webpackHotDevClient
的此客户端,但它似乎尝试在没有端口的情况下进行连接,然后进行升级协商并尝试连接端口。
我们不能使用public
和publicPath
配置选项,因为我们有多个索引。我们只需要发现连接的位置只使用window.location
而不添加端口等额外信息。