Node.js 如何在IIS重写/相对基本Url的情况下使用Webpack热中间件/Webpack热重新加载?
我们正在开发一个应用程序,使用hapi作为Web服务器和webpack热中间件来替换热模块 应用程序服务器在Node.js 如何在IIS重写/相对基本Url的情况下使用Webpack热中间件/Webpack热重新加载?,node.js,webpack,hapijs,webpack-hmr,webpack-hot-middleware,Node.js,Webpack,Hapijs,Webpack Hmr,Webpack Hot Middleware,我们正在开发一个应用程序,使用hapi作为Web服务器和webpack热中间件来替换热模块 应用程序服务器在http://hostname:8080 通常可通过http://hostname/my/module/ 制作http://hostname/my/module/为在主机名:8080下运行的应用程序提供服务,我们正在使用IIS重写,重写http://hostname/my/module/(…)至http://hostname:8080/(…) 现在,使用webpack热中间件开发时出现了这
http://hostname:8080
通常可通过http://hostname/my/module/
制作http://hostname/my/module/
为在主机名:8080下运行的应用程序提供服务,我们正在使用IIS重写,重写http://hostname/my/module/(…)
至http://hostname:8080/(…)
现在,使用webpack热中间件开发时出现了这个问题。看起来,webpack热模块替换总是试图将其hmr端点(我认为用于检测/服务更改的websocket)硬编码在/\uuuuuWebpack\uHMR
上,如果根页面http://hostname/my/module/
已打开-解析为http://hostname/__webpack_hmr
。当然,由于IIS运行在http://hostname/
不知道任何有关webpack hmr的信息
现在,对于开发,使用自己的地址http://hostname:8080/
但随后,会发生CORS错误:
CORS策略已阻止从源“”访问“”处的资源:请求的资源上不存在“访问控制允许源”标头
因此,即使我使用http://hostname:8080
,webpack hmr仍尝试在http://hostname/__webpack_hmr
然后会因CORS错误而再次失败
是否有任何选项可以告诉webpack.HotModuleReplacementPlugin
它应该作为相对路径服务于\uuuwebpack\uhmr
端点,因此它最终会成为http://hostname/my/module/__webpack_hmr
(被重写为http://hostname:8080/__webpack_hmr
哪个地址正确)
或者,如果这是不可能的,那么在使用http://hostname:8080/(…)
我在文件里什么也没找到。只有在一些Github问题中提到了WebpackpublicPath
configuration,但我没有看到它对我有什么帮助
更新
我更进一步,检测到将网页包配置中的网页包热中间件
入口点设置为“网页包热中间件/客户端”路径=http://hostname/my/module/__webpack_hmr“
使uuu webpack_hmr端点在正确的位置可用
但现在的下一个问题是人力资源管理文件
dist.XYZ.hot update.json
distbundle.XYZ.hot update.js
也尝试直接位于根目录下(/dist.XYZ.hot update.json
,/distbundle.XYZ.hot update.js
)。
是否有可能将这些位置设置为相对位置/为它们设置特定的子目录
添加另一个IIS重写以将这些路径重写为类似http://localhost:8080/dist.XYZ.hot-update.json可以让它工作,但我更喜欢不必为此配置IIS的解决方案。尝试添加它,但不指定实际的域名和端口
// Add hot reloading in development
entry: [
'webpack-hot-middleware/client?reload=true&path=/my/module/__webpack_hmr',
],
或者,您可以使用dynamicPublicPath
并设置正确的publicPath
// Add hot reloading in development
entry: [
'webpack-hot-middleware/client?reload=true&dynamicPublicPath=true',
],
检查此处的文档热更换是可接受ip:8080的开发阶段的一项功能。对于需要一个域的测试和生产,不推荐使用它。@JRichardsz这个问题纯粹是关于开发的。但即使在开发中,我们也需要一个主机名(本地机器的主机名)。如果我们处于开发阶段,在linux桌面上,开发人员不需要域或主机名。只需npm运行dev并打开如下内容:localhost:8080127.0.0.1:8080,一切正常。开发人员不需要重写或其他与网络相关的复杂配置。可能问题在于对NodeJ使用IIS和windows。这些技术都是为linux而生的,同样在生产环境中,linux是最好的选择。如果问题仍然存在,您是否能够使用其他工具,如apache或nginx?