AspNetCore React 只能在 dev 模式下找到 spa 文件
AspNetCore React can only find spa files in dev mode
我的 AspNetCore/React 项目在开发环境中工作正常,但是一旦我 运行 在任何其他环境中我得到 System.InvalidOperationException: The SPA default page middleware could not return the default page '/index.html' because it was not found, and no other middleware handled the request.
startup.cs 配置方法的结尾如下所示
app.UseSpa(spa =>
{
spa.Options.SourcePath = "ClientApp";
if (env.IsDevelopment())
{
spa.UseReactDevelopmentServer(npmScript: "start");
}
});
但由于这与 dotnet new react
生成的应用程序中的相应代码相同,我想是其他原因扰乱了它。
网络服务器确实启动了,我可以访问 Swagger 页面。只是找不到合适的应用程序。破解上面的代码,以便 spa.UseReactDevelopmentServer(npmScript: "start");
运行s 导致在所有环境中找到该应用程序(已加载特定于环境的配置),但由 React 开发服务器提供服务。
我会说这一行
spa.Options.SourcePath = "ClientApp";
是发现 /index.html
和朋友的原因,但有些东西阻止他们被发现。
我还应该看什么?
我看过这个 The SPA default page middleware could not return the default page 但我不认为这是我面临的问题。
对该项目的搜索显示只有一个文件 index.html
,它位于 ClientApp/public
。 Configure方法是这样开始的
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
// The default HSTS value is 30 days...
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseSpaStaticFiles();
React 资产不是由 dotnet build
或 dotnet run
构建的,甚至 -c Release
也不是。
同时构建您需要的 React 资产 dotnet publish
。
由于早期使用 dotnet publish
,此要求可能会被资产的存在所掩盖。在那种情况下,它们可能会过时。因此,对于 dev 以外的任何环境,您 必须 使用 dotnet publish
.
为什么 dotnet build
和 dotnet run
不构建 React 资产?在开发中你不需要它们,因为你正在使用开发服务器进行热插拔。在生产中,您几乎肯定会使用 dotnet publish
.
准备的资产
为什么我不记得了?我几乎从不 做 为 dev 以外的环境构建。我不为生产而构建,CICD 这样做。专业测试人员比程序员更容易意识到这一点,因为他们是为开发环境以外的环境构建的。
我的 AspNetCore/React 项目在开发环境中工作正常,但是一旦我 运行 在任何其他环境中我得到 System.InvalidOperationException: The SPA default page middleware could not return the default page '/index.html' because it was not found, and no other middleware handled the request.
startup.cs 配置方法的结尾如下所示
app.UseSpa(spa =>
{
spa.Options.SourcePath = "ClientApp";
if (env.IsDevelopment())
{
spa.UseReactDevelopmentServer(npmScript: "start");
}
});
但由于这与 dotnet new react
生成的应用程序中的相应代码相同,我想是其他原因扰乱了它。
网络服务器确实启动了,我可以访问 Swagger 页面。只是找不到合适的应用程序。破解上面的代码,以便 spa.UseReactDevelopmentServer(npmScript: "start");
运行s 导致在所有环境中找到该应用程序(已加载特定于环境的配置),但由 React 开发服务器提供服务。
我会说这一行
spa.Options.SourcePath = "ClientApp";
是发现 /index.html
和朋友的原因,但有些东西阻止他们被发现。
我还应该看什么?
我看过这个 The SPA default page middleware could not return the default page 但我不认为这是我面临的问题。
对该项目的搜索显示只有一个文件 index.html
,它位于 ClientApp/public
。 Configure方法是这样开始的
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
// The default HSTS value is 30 days...
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseSpaStaticFiles();
React 资产不是由 dotnet build
或 dotnet run
构建的,甚至 -c Release
也不是。
同时构建您需要的 React 资产 dotnet publish
。
由于早期使用 dotnet publish
,此要求可能会被资产的存在所掩盖。在那种情况下,它们可能会过时。因此,对于 dev 以外的任何环境,您 必须 使用 dotnet publish
.
为什么 dotnet build
和 dotnet run
不构建 React 资产?在开发中你不需要它们,因为你正在使用开发服务器进行热插拔。在生产中,您几乎肯定会使用 dotnet publish
.
为什么我不记得了?我几乎从不 做 为 dev 以外的环境构建。我不为生产而构建,CICD 这样做。专业测试人员比程序员更容易意识到这一点,因为他们是为开发环境以外的环境构建的。