Angular 17:fileReplacements 不替换文件

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

我有一个 C#/Angular 17 SPA 项目,在具有多个部署槽的 Azure 应用服务上的 Docker 容器中运行。基本上,生产槽加载标记为“latest-prod”的图像,而暂存槽加载标记为“latest-staging”的图像。容器由 Azure DevOps 中的 YAML 管道自动构建。

我的 angular.json 文件包含用于登台(以及生产和开发)的配置以及environment.ts所需的文件替换(请参阅Angular文档):

    "configurations": {
        "staging": {
          "fileReplacements": [
            {
              "replace": "src/environments/environment.ts",
              "with": "src/environments/environment.staging.ts"
            }
          ],
          "outputHashing": "all"
        },
      "defaultConfiguration": "production"
    }

我的管道构建过程如下所示:

displayName: Build and push image
steps:
- script: |
    cd ClientApp
    npm install
    npm install -g @angular/cli
    ng build --configuration=staging
    grep -q "staging" src/main* && echo "String found" || echo "String not found"

如您所见,我检查最终版本是否存在

environment.staging.ts
文件中的字符串“staging”,如下所示:

environment: "staging",

在管道中,脚本打印

"String not found"

但是,我在我的机器上本地运行了

ng build --configuration=staging
。在本地运行
grep
显示
"String found"

所以看起来文件替换在本地工作得很好,但在管道内却不行。

关于如何进行有什么建议吗?

angular yaml azure-pipelines-yaml
1个回答
0
投票

感谢所有的建议,解决方案非常简单:该项目是在 Docker 文件中构建的,我从管道环境中复制了 Angular 构建到错误的位置。这解决了问题(注意我最初复制构建的注释掉的副本):

FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80 443 8000 2222
ENV ASPNETCORE_URLS=https://+:443;http://+:80

FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
RUN apt-get update && \
    apt-get install -y wget && \
    apt-get install -y gnupg2 && \
    wget -qO- https://deb.nodesource.com/setup_18.x | bash - && \
    apt-get install -y build-essential nodejs

WORKDIR /src
COPY ["MyProject.csproj", "./"]
RUN dotnet restore "MyProject.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "MyProject.csproj" -c Release -o /app/build


FROM build AS publish
RUN dotnet publish "MyProject.csproj" -c Release -o /app/publish /p:UseAppHost=false
###COPY ClientApp/dist /app/publish/ClientApp/

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
COPY ClientApp/dist /app/wwwroot
ENTRYPOINT ["dotnet", "MyProject.dll"]
© www.soinside.com 2019 - 2024. All rights reserved.