如何在 Azure 管道中使用 npm link 命令

How to use npm link command in Azure pipelines

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

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

如果库是在不同的阶段或作业中首次构建的,则库将不会与其他 Web 部件位于同一代理机器中。

假设库是在阶段 A 中构建的,其他 Web 部件是在阶段 B 中构建的。作为解决方法,您需要使用 Publish Build Artifacts task in stage A. And then download the library to the agent which builds the other webparts in Stage B using Download Build Artifacts task.[=15 将库作为工件发布到 azure devops 服务器=]

例如:

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

的工件发布到 azure devops 服务器

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

如果在 B 阶段的不同作业中构建了多个 Web 部件,则 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
    ...

在尝试了上面发布的解决方案后,它仍然不起作用,所以我使用 npm publish 命令将其发布为 NPM 包。这解决了问题。 我们也可以在 YAML 中使用这个命令在每次构建时自动发布包,但在我的情况下不需要,所以我没有使用它。