如何在 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 中使用这个命令在每次构建时自动发布包,但在我的情况下不需要,所以我没有使用它。
我已经创建了 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
.
在阶段 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 中使用这个命令在每次构建时自动发布包,但在我的情况下不需要,所以我没有使用它。