我是ASP.NET Core的忠实粉丝,并且已经跟随其从VS2017的第一步到集成的演变,并返回到基于msbuild的项目系统。我也是Google聚合物的忠实粉丝,现在2.0版本已经完成,我想尝试两者的结合。
我创建了一个ASP.NET Core Web Api项目,该项目将为Polymer前端实现REST API。然后我将命令行指向wwwroot文件夹并执行
polmyer init
创建一个创建一些模板html文件的应用程序模板和一个包含所有基本依赖项的bower_components目录,所有这些都在wwwroot文件夹中!
我的问题是:
VS2017有一个发布功能,默认情况下会发布wwwroot文件夹中的所有内容,但可能会允许我排除特定的文件或文件夹。另一方面,Polymer CLI作为构建函数,允许我将ES6编译为ES5,最小化HTML,CSS,JS或所有文件并捆绑文件。我怎样才能将这两者结合起来,让我在VS2017中获得一键式发布体验?
答案 0 :(得分:5)
这是我目前的解决方案:
使用VS2017创建一个新的ASP.NET核心Web应用程序(.NET Core)项目。添加Microsoft.AspNetCore.StaticFiles Nuget包以便能够提供静态文件。
使用命令行导航到 wwwroot 目录并执行
polymer init
按照向导创建所需的聚合物项目类型。
在VS IDE中打开 csproj 文件,找到包含 wwwroot 目录的项目组作为文件夹。注释掉这一行并添加两行。第一个阻止VS复制整个 wwwroot 目录。第二个添加聚合物构建目录,以便稍后在复制任务中引用它。
<ItemGroup>
<!--<Folder Include="wwwroot\" />-->
<Content Update="wwwroot\**\*" CopyToPublishDirectory="Never" />
<ClientFiles Include="wwwroot\build\default\**\*" />
</ItemGroup>
(请注意,我在内容节点中使用更新而非包含!)
使用以下内容创建批处理文件 polymer-build.cmd ,并将其放在项目根目录中。这将使聚合物在每次VS发布之前构建客户端文件
cd wwwroot
polymer build
在这里你可以添加诸如--js-compile, - css-minify等选项。
在 csproj 文件中创建一个新目标节点,以便在发布之前调用批处理文件
<Target Name="PolymerBuild" BeforeTargets="Publish">
<Exec Command="polymer-build.cmd" />
</Target>
最后创建另一个带有复制任务的目标节点,将聚合物构建目录复制到wwwroot目录
<Target Name="PolymerPublish" AfterTargets="Publish">
<Copy SourceFiles="@(ClientFiles)" DestinationFolder="$(PublishUrl)\wwwroot\%(RecursiveDir)" />
</Target>
<强>加成强>
你可能还想要抑制你可以在 csproj 中通过
进行的TypeScript编译<PropertyGroup>
<TypeScriptCompileBlocked>True</TypeScriptCompileBlocked>
</PropertyGroup>
参考文献:
答案 1 :(得分:0)
您可以在Vusual Stddio的项目的预构建命令中添加polymer init
命令。