如何在.NET 7中设置特定于环境的“npm start”命令?

问题描述 投票:0回答:1

我正在使用 .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中)取代文件)。

如何根据程序是在开发中运行还是在生产中运行来使用不同的 npmngserve 命令?我正在寻找任何解决方案:是否可以直接在 .csproj 中执行此操作或 package.json 文件(而不是在 program.cs 中),那么我想知道如何做到这一点。

proxy single-page-application package.json csproj vs-web-application-project
1个回答
0
投票

我通过向 SpaProxyLaunchCommand 添加条件来完成我想要的操作,如下所示:

<SpaProxyLaunchCommand Condition="'$(ASPNETCORE_ENVIRONMENT)' == 'Production'">npm run startprod</SpaProxyLaunchCommand>
<SpaProxyLaunchCommand Condition="'$(ASPNETCORE_ENVIRONMENT)' != 'Production'">npm run startdev</SpaProxyLaunchCommand>
© www.soinside.com 2019 - 2024. All rights reserved.