发布Polymer + ASP.NET Core

Nic*_*asR 3 polymer asp.net-core visual-studio-2017

我是ASP.NET Core的忠实拥护者,从最初的步骤到VS2017中的集成,一直到基于msbuild的项目系统,都遵循了它的演变。我也是Google Polymer的忠实拥护者,现在2.0版本已经差不多完成了,我想尝试两者的结合。

我创建了一个ASP.NET Core Web Api项目,该项目将为Polymer前端实现REST API。然后我将命令行指向wwwroot文件夹并执行

polmyer init 
Run Code Online (Sandbox Code Playgroud)

创建一个应用程序模板,该模板创建一些模板html文件和一个带有所有基本依赖项的bower_components目录,所有这些都位于wwwroot文件夹中!

我的问题是:

VS2017具有发布功能,默认情况下会发布wwwroot文件夹中的所有内容,但可能会让我排除特定的文件或文件夹。另一方面,Polymer CLI作为构建功能,使我可以将ES6编译为ES5,最小化HTML,CSS,JS或全部,并将文件捆绑在一起。如何将两者结合起来以在VS2017中为我提供单击发布体验?

Nic*_*asR 6

这是我当前的解决方案:

使用VS2017创建一个新的ASP.NET Core Web应用程序(.NET Core)项目。添加Microsoft.AspNetCore.StaticFiles Nuget包,以便能够提供静态文件。

使用命令行导航到wwwroot目录,然后执行

polymer init
Run Code Online (Sandbox Code Playgroud)

按照向导创建所需的聚合物项目类型。

在VS IDE中打开csproj文件,找到其中包含wwwroot目录作为文件夹的项目组。注释掉这一行并添加两行。第一个阻止VS复制整个wwwroot目录。第二个再次添加了聚合物构建目录,因此我们以后可以在复制任务中引用它。

<ItemGroup>
  <!--<Folder Include="wwwroot\" />-->
  <Content Update="wwwroot\**\*" CopyToPublishDirectory="Never" />
  <ClientFiles Include="wwwroot\build\default\**\*" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)

(请注意,我在内容节点中使用了Update而不是Include!)

创建具有以下内容的批处理文件Polymer-build.cmd并将其放置在项目根目录中。这将使Polymer在每个VS发布之前先构建客户端文件。

cd wwwroot
polymer build
Run Code Online (Sandbox Code Playgroud)

在这里,您可以添加--js-compile,-css-minify等选项。

在发布之前,在csproj文件中创建一个新的目标节点以调用批处理文件

<Target Name="PolymerBuild" BeforeTargets="Publish">
  <Exec Command="polymer-build.cmd" />
</Target>
Run Code Online (Sandbox Code Playgroud)

最后,使用复制任务创建另一个目标节点,以将聚合物构建目录复制到wwwroot目录

<Target Name="PolymerPublish" AfterTargets="Publish">
  <Copy SourceFiles="@(ClientFiles)" DestinationFolder="$(PublishUrl)\wwwroot\%(RecursiveDir)" />
</Target>
Run Code Online (Sandbox Code Playgroud)

加成

您可能还想抑制TypeScript编译,您可以在csproj中通过

<PropertyGroup>
    <TypeScriptCompileBlocked>True</TypeScriptCompileBlocked>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

参考文献: