Asp.net core 如何配置webpack以支持某些主机中的虚拟路径?

Asp.net core 如何配置webpack以支持某些主机中的虚拟路径?,asp.net-core,webpack-4,Asp.net Core,Webpack 4,我正在为后端使用ASP.NET核心构建一个应用程序,并为客户端运行一个React应用程序。我已经设置了webpack,将SASS转换为CSS,将TypeScript转换为JavaScript,并使用HtmlWebpackPlugin将这些包添加到\u Layout.cshtml文件中。捆绑包发布到wwwroot/dist/ 这一切都与我的本地开发托管非常配合。当我尝试在虚拟目录中运行应用程序时(这是我的一些部署的要求),挑战就来了。ASP.NET将根据宿主信息将虚拟路径解析为完整路径(例如,~\

我正在为后端使用ASP.NET核心构建一个应用程序,并为客户端运行一个React应用程序。我已经设置了webpack,将SASS转换为CSS,将TypeScript转换为JavaScript,并使用
HtmlWebpackPlugin
将这些包添加到
\u Layout.cshtml
文件中。捆绑包发布到
wwwroot/dist/

这一切都与我的本地开发托管非常配合。当我尝试在虚拟目录中运行应用程序时(这是我的一些部署的要求),挑战就来了。ASP.NET将根据宿主信息将虚拟路径解析为完整路径(例如,
~\resource
解析为
\virtual directory\resource
),但网页包资源将编译为固定路径

我已尝试设置
publicPath
属性以生成虚拟路径:

output: {
    path: path.resolve(__dirname, 'wwwroot/dist'),
    publicPath: '~/dist/'
}
虽然这对于我的
\u Layout.cshtml
文件引用的捆绑包非常有效,插入以ASP.NET将解析的虚拟路径标识符为前缀的
href
值,但当任何捆绑包引用其他文件(如图像)时,它都不起作用。ASP.NET无法解析这些引用,浏览器尝试在
https://host/~/dist/images/cat.png


我想要的是相对于应用程序根而不是主机根解析所有资源。

路径构造不是标准的。Razor理解这意味着相对于文档根的相对路径,并将其替换为有效的主机相对路径。然而,若你们正在做的事情并没有被Razor处理,那个么你们就不能使用它

您所能做的最好是自相关路径(
path/to/file
,即没有前面的
/
)或主机相关路径(
/path/to/file
,即前面的
/
)。在前一种情况下,将从上下文中的文件路径解释路径。例如,如果路径在JS文件中,那么它将相对于JS文件所在的位置。在后一种情况下,它将相对于主机,即来自主机的完整路径,包括任何虚拟目录


您无需处理任何其他内容,因为像webpack这样的文件系统实用程序中没有应用程序根的概念。这个概念只存在于正在运行的应用程序的上下文中。

Webpack的资产解析希望使用主机相对路径,并假设您在构建时始终知道该路径。我找不到一种方法让它使用自相关路径。有什么解决方案吗?正如我所说,没有。您所说的虚拟目录只存在于web服务器(例如IIS)中运行的应用程序的上下文中。除此之外,没有办法知道或告诉我们这条路应该是什么。