在 VS2019 Preview 中,您有多个模板。我对以下两个感兴趣:
我和两者都玩了一下,我观察到了不同。在ASP.NET Core with React.js
模板中,启动了一个 SPA 代理服务器,而在ASP.NET Core with React.js and Redux
没有它的情况下简单地工作(第二个模板在 TS 中,而不是 JS 中)。
我的意思是simply works without that
。我查看了这两个.csproj
文件,发现了一个差异(我只会附上值得注意的差异):
第一个模板:
...
<SpaProxyServerUrl>https://localhost:5002</SpaProxyServerUrl>
<SpaProxyLaunchCommand>npm start</SpaProxyLaunchCommand>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.SpaProxy" Version="6.0.0-preview.6.21355.2" />
</ItemGroup>
...
<ItemGroup>
<DistFiles Include="$(SpaRoot)build\**" />
<ResolvedFileToPublish Include="@(DistFiles->'%(FullPath)')" Exclude="@(ResolvedFileToPublish)">
<RelativePath>wwwroot\%(RecursiveDir)%(FileName)%(Extension)</RelativePath>
...
第二个模板:
...
# SpaProxy stuff missing
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.SpaServices.Extensions" Version="6.0.0-preview.5.21301.17" />
</ItemGroup>
...
<ItemGroup>
<DistFiles Include="$(SpaRoot)build\**; $(SpaRoot)build-ssr\**" />
<ResolvedFileToPublish Include="@(DistFiles->'%(FullPath)')" Exclude="@(ResolvedFileToPublish)">
<RelativePath>%(DistFiles.Identity)</RelativePath>
请注意,在第二个模板Microsoft.AspNetCore.SpaServices.Extensions
中使用而不是Microsoft.AspNetCore.SpaProxy
.
文件中也存在一些差异Startup.cs
。第二个模板使用了一些额外的中间件
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
// NEW
services.AddSpaStaticFiles(configuration =>
{
configuration.RootPath = "ClientApp/build";
});
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
...
// NEW
app.UseSpaStaticFiles();
...
// NEW
app.UseSpa(spa =>
{
spa.Options.SourcePath = "ClientApp";
if (env.IsDevelopment())
{
spa.UseReactDevelopmentServer(npmScript: "start");
}
});
}
我还观察到,在 JSClientApp
中有一个setupProxy.js
文件,而在 TSClientApp
中没有。该npm start
命令也设置为"start": "rimraf ./build && react-scripts start"
,在 TS 文件中它只是react-scripts start
.
我试图进行必要的调整来运行 TS 应用程序这样的 JS 应用程序,但我认为我遇到了一个问题,因此我遗漏了一些东西:
System.Net.Http.HttpRequestException:无法将请求代理到 http://localhost:61105/,因为对代理目标的请求失败。检查代理目标服务器是否正在运行并接受对 http://localhost:61105/ 的请求。
虽然这个错误确实有意义,但我不知道 TS 模板在哪里以及如何启动这样的代理服务器(如果有的话)。
我的问题是:我可以在JS模板中获取TS模板的行为吗?如果是,如何?如果不是,为什么?