【问题标题】:Publishing Polymer + ASP.NET Core发布 Polymer + ASP.NET Core
【发布时间】:2019-08-21 05:22:34
【问题描述】:

我是 ASP.NET Core 的忠实拥护者,从最初的步骤到在 VS2017 中的集成以及回归到基于 msbuild 的项目系统,我一直在关注它的演变。我也是 Google Polymer 的忠实粉丝,现在 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 中获得一键发布体验?

【问题讨论】:

    标签: asp.net-core polymer visual-studio-2017


    【解决方案1】:

    这是我目前的解决方案:

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

    使用命令行导航到 wwwroot 目录并执行

    polymer init
    

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

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

    <ItemGroup>
      <!--<Folder Include="wwwroot\" />-->
      <Content Update="wwwroot\**\*" CopyToPublishDirectory="Never" />
      <ClientFiles Include="wwwroot\build\default\**\*" />
    </ItemGroup>
    

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

    创建一个批处理文件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>
    

    加法

    您可能还想禁止 TypeScript 编译,您可以在 csproj 中通过

    <PropertyGroup>
        <TypeScriptCompileBlocked>True</TypeScriptCompileBlocked>
    </PropertyGroup>
    

    参考资料:

    【讨论】:

      【解决方案2】:

      您可以在Vusual Stddio项目的pre-build命令中添加polymer init命令。

      【讨论】:

      • 谢谢,但polymer init 是项目设置期间的一次性任务。它必须是polymer build (--options),我不想在每次 VS 构建期间都执行它! polymer build 更像是 VS 发布,所以它必须在 VS 发布上或之前直接执行(如果有这样的事件)。 polymer build 创建一个构建子目录,该目录必须是 VS 发布的,而不是 wwwroot 中的所有其他文件。对此有何想法?
      • @NicolasR Polymer 和 ASP.NET Core 如何为您工作?您是否在任何地方都有博客或文档。我正在考虑做同样的事情
      • @JordanMcDonald 抱歉,没有博客 :-( 到目前为止,我真的很喜欢这种组合。我喜欢干净的分离:用于 REST API 的 ASP.NET,用于从具体数据库技术和 Polymer 中抽象出来的 EF Core对于具有符合标准的组件系统的客户端单页应用程序。我也喜欢服务器端现在可以在许多平台上运行,甚至在带有 Linux 的 RasPi 上。Polymer 隐藏了主要浏览器对 Web 组件的不同支持。ES6在 Polymer 中定义组件的类语法对来自 C++/C# 的人有很大帮助。不过,Polymer 社区可能会更大。
      • @NicolasR 我期待着做同样的事情,你能在某处发布一种教程吗?或者制作一个基本模板?所以像我这样的其他用户也可以从中受益吗?谢谢
      • @touseef 好的,给我一点时间,我会尝试在github上设置。
      猜你喜欢
      • 1970-01-01
      • 2017-12-15
      • 2019-05-23
      • 2021-01-30
      • 1970-01-01
      • 2022-01-01
      • 2018-09-01
      • 2016-09-16
      • 1970-01-01
      相关资源
      最近更新 更多