【发布时间】:2019-08-29 13:50:52
【问题描述】:
我使用来自 Visual Studio 的模板创建了一个带有 Angular ClientApp 的 .Net Core Web Api。
在构建项目时,还会使用 .csproj
<Target Name="PublishRunWebpack" AfterTargets="ComputeFilesToPublish">
<!-- As part of publishing, ensure the JS resources are freshly built in production mode -->
<Exec WorkingDirectory="$(SpaRoot)" Command="npm install" />
<Exec WorkingDirectory="$(SpaRoot)" Command="npm run build -- --prod" />
<Exec WorkingDirectory="$(SpaRoot)" Command="npm run build:ssr -- --prod" Condition=" '$(BuildServerSideRenderer)' == 'true' " />
<!-- Include the newly-built files in the publish output -->
<ItemGroup>
<DistFiles Include="$(SpaRoot)dist\**; $(SpaRoot)dist-server\**" />
<DistFiles Include="$(SpaRoot)node_modules\**" Condition="'$(BuildServerSideRenderer)' == 'true'" />
<ResolvedFileToPublish Include="@(DistFiles->'%(FullPath)')" Exclude="@(ResolvedFileToPublish)">
<RelativePath>%(DistFiles.Identity)</RelativePath>
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
</ResolvedFileToPublish>
</ItemGroup>
</Target>
(此部分是在创建新项目时自动生成的)
然而,这让我别无选择应该在构建期间使用来自 Angular 的哪个 environment.ts 文件,这使得针对不同部署目标的构建有点复杂。
有没有办法在构建过程中动态设置这个文件?例如
- appsettings.json 应该使用 environment.ts 构建
- appsettings.Development.json 应该使用 environment.dev.ts 构建
- appsettings.Production.json 应该使用 environment.prod.ts 构建
- 等
这将确保每个 dotnet 构建及其对应的 Angular 构建都具有 api-url、版本等的正确环境值...
或者是否有另一种(更清洁的?)方法来使用/覆盖 Angular 应用程序的环境变量?
这些是在构建过程中应该交换的值
export const environment = {
production: false,
dataServiceURI: 'https://localhost:5001/data',
version: 'localhost'
};
例如,由于 localhost:5001 在 prod 中是不可行的选择
【问题讨论】:
-
我不了解 .NET 部分,但您可以使用不同的命令使用不同的目标元素,例如
npm run build选择 environment.ts 或npm run build --configuration=dev选择 environment.dev.ts .您必须在 angular.json 文件中定义配置。 -
对于这种方法,我不太了解 .csproj xml 的结构,无法轻松操作它。我试过了,但失败得很惨
标签: angular asp.net-core-2.2 .net-core-2.2