我正在使用 .NET Core 7.0,并基于 ASP.NET Core with Angular 模板创建了一个项目,该模板是 Visual Studio 2022 中的标准模板(也许在早期版本中也是如此)。
创建项目时,在 .csproj 文件中自动生成以下行:
<SpaProxyLaunchCommand>npm start</SpaProxyLaunchCommand>
并且在项目的
package.json文件中找到
npm start
命令,如下:
"start": "ng serve --port 44450",
我的问题是如何根据程序当前运行的环境运行不同的 npm launch 命令。例如,如果我按如下方式更改 package.json:
"startdev": "ng serve --port 44450",
"startprod": "ng serve --port 44451",
如何确保项目在Development环境中运行时正在使用startdev命令。或者,当项目在 Production 环境中运行时,如何确保使用 startprod 命令?
我最好的猜测是将以下代码添加到项目的 program.cs 文件中:
webApplication.UseSpa(spa =>
{
spa.Options.SourcePath = "ClientApp";
if (webApplication.Environment.IsProduction())
{
spa.UseAngularCliServer(npmScript: "startprod");
}
else
{
spa.UseAngularCliServer(npmScript: "startdev");
}
});
但是 WebApplication 类似乎没有 .UseSpa 函数,因为我收到以下错误消息:
“WebApplication”不包含“UseSpa”的定义,并且找不到接受“WebApplication”类型的第一个参数的可访问扩展方法“UseSpa”(您是否缺少 using 指令或程序集引用?)
我不知道如何让它工作,并且我得到的印象(来自此链接和其他链接).UseSpa已过时,已被前面提到的SpaProxyLaunchCommand(在.csproj中)取代文件)。
如何根据程序是在开发中运行还是在生产中运行来使用不同的 npm 或 ngserve 命令?我正在寻找任何解决方案:是否可以直接在 .csproj 中执行此操作或 package.json 文件(而不是在 program.cs 中),那么我想知道如何做到这一点。
我通过向 SpaProxyLaunchCommand 添加条件来完成我想要的操作,如下所示:
<SpaProxyLaunchCommand Condition="'$(ASPNETCORE_ENVIRONMENT)' == 'Production'">npm run startprod</SpaProxyLaunchCommand>
<SpaProxyLaunchCommand Condition="'$(ASPNETCORE_ENVIRONMENT)' != 'Production'">npm run startdev</SpaProxyLaunchCommand>