首页 > 解决方案 > 如何在 Azure 管道中使用 npm link 命令

问题描述

我创建了 SPFX 库模块,其中的代码与多个 webpart 共享,类似于此处的一个。我使用npm link <lib name>命令链接它。它在本地环境中以及当我在 SharePoint 在线应用程序目录中手动部署时运行良好。但是,如果我使用 Azure Pipelines(YAML 脚本)部署它,它总是会抛出找不到库的错误。

我已经确保首先构建库,然后在管道中构建其他 webparts(通过引入阶段),但仍然找不到库。有没有办法将 npm link 作为管道任务运行?

标签: yamlazure-pipelinesspfx

解决方案


如果库首先在不同的阶段或作业中构建,则库将不会与其他 webpart 位于同一代理计算机中。

假设库在阶段 A 中构建,其他 webpart 在阶段 B 中构建。作为解决方法,您需要使用阶段 A 中的发布构建工件任务将库作为工件发布到 azure devops 服务器。然后将库下载到在阶段 B 中使用Download Build Artifacts task构建其他 webpart 的代理。

对于以下示例:

该库在阶段 A 中构建,并作为名为library.

在阶段 B 中,库工件从 azure devops 服务器下载到文件夹$(Build.ArtifactStagingDirectory)。然后您可以通过路径引用该库以$(Build.ArtifactStagingDirectory)/library执行 Stage B 中的以下任务。

如果在 Stage B 的不同作业中构建了多个 webpart,则 Stage B 中的每个作业都需要下载库工件,因为不同的作业在不同的代理虚拟机上运行。

stages:
- stage: A
  jobs:
  - job: Library
    pool: 
      vmImage: "windows-latest"
    steps:
    ...
    - task: PublishBuildArtifacts@1
      inputs:
        PathtoPublish: {path to the library}
        ArtifactName: library


- stage: B
  dependsOn: A
  jobs:
  - job: WebParts1
    pool: 
      vmImage: "windows-latest"
    steps:

    - task: DownloadBuildArtifacts@0
      inputs:
        downloadPath: $(Build.ArtifactStagingDirectory)
        buildType: current
        artifactName: library
    ...

  - job: WebParts2
    pool: 
      vmImage: "windows-latest"
    steps:

    - task: DownloadBuildArtifacts@0
      inputs:
        downloadPath: $(Build.ArtifactStagingDirectory)
        buildType: current
        artifactName: library
    ...

推荐阅读