在 Azure DevOps 构建管道中还原 Libman JS 库

Restore Libman JS Libraries in Azure DevOps Build Pipeline

我已经建立了一个快乐的 Azure DevOps 构建管道,它在提交到分支时触发,然后恢复 Nuget 包,构建我的 Mvc.Core Web 应用程序并将其部署到 Azure 应用程序服务。

但是 LibMan 中引用的 JS 库没有恢复并部署到 Azure。我怎样才能做到这一点?

我已经包含了 LibMan 构建包(我阅读了 would carry out the task automatically),但并不开心。

<PackageReference Include="Microsoft.Web.LibraryManager.Build" Version="2.0.96" />    

我真的需要向管道添加一个 .net 核心自定义命令到 install the LibraryManager Cli tool, and then call it to restore the JS libraries 吗?它似乎比我预期的要复杂,而且我还没有找到任何人在网上这样做的例子。

另一种方法是将 JS 库包含在源代码管理中吗?如果可能的话,我确实想避免这种情况,但如果这是标准方法,那么我想我很乐意这样做。

非常感谢在 Azure DevOps 中实现此目的的任何建议或 YAML 示例。

Restore Libman JS Libraries in Azure DevOps Build Pipeline

您不需要向管道添加 .net core 自定义命令来恢复 JS 库。

我创建了一个示例来测试 LibMan 构建包,它在 Azure devops 上运行良好。

要使用 LibMan 构建包,首先,您需要在项目中设置正确的 libman.json with JS Libraries,例如:

{
  "version": "1.0",
  "defaultProvider": "cdnjs",
  "libraries": [
    {
      "provider": "cdnjs",
      "library": "jquery@3.2.1",
      "destination": "wwwroot/lib/jquery",
      "files": [
        "jquery.min.js",
        "jquery.js",
        "jquery.min.map"
      ]


    }
  ]
}

那是因为 LibMan 包会恢复基于 libman.json 的 JS 库。您将在 LibMan 构建包的 microsoft.web.librarymanager.build.targets 中找到以下目标:

<Target Name="LibraryManagerRestore" Condition="'$(LibraryRestore)' != 'False'">

    <Microsoft.Web.LibraryManager.Build.RestoreTask
        FileName="libman.json"
        ProjectDirectory="$(MSBuildProjectDirectory)"
        ProviderAssemblies="$(LibraryProviderAssemblies)">

        <Output TaskParameter="FilesWritten" ItemName="_FilesWritten"/>
    </Microsoft.Web.LibraryManager.Build.RestoreTask>

    <ItemGroup>
        <FilesForPackagingFromProject  Include="%(_FilesWritten.Identity)">
            <DestinationRelativePath>%(_FilesWritten.Identity)</DestinationRelativePath>
        </FilesForPackagingFromProject>
    </ItemGroup>
</Target>

此 .targets 只会在构建期间由 MSBuild 解析,

所以,其次,当您构建您的项目而不是恢复包时,这些 JS 库将被恢复。

作为测试,我从我的存储库中删除了 JS libraries

然后在 dotnet 构建完成后,我可以在文件夹 wwwroot/lib/jquery:

中获取 JS libraries

如果它仍然不能解决您的问题,请确保您可以在没有 Azure Devops 的情况下从 Visual Studio 构建时恢复 JS 库。

顺便说一句,您还可以使用任务 Libman(预览版)而不是 MSBuild 来恢复 libman.json.

中定义的包

希望对您有所帮助。

在我们的案例中恢复 LibMan JS 库的问题原来是另一个开发人员几个月前添加的项目文件设置,当时他们遇到构建时间慢的问题,as mentioned here

 <PropertyGroup>
    <LibraryRestore>false</LibraryRestore>
  </PropertyGroup>

一旦我找到并删除了这个设置,不出所料,LibMan 恢复工作完美,而且构建时间也没有特别慢。

我想理想的情况是不要尝试在每次构建时执行 LibMan 恢复,而是在开发人员机器上手动执行,然后作为 DevOps 构建管道中的特定步骤?但无论如何,现在一切正常了。