GitHub Action中如何捕获vsce生成的VSIX文件名到指定输出变量
解决VSCode扩展打包替换为vsce后捕获VSIX文件名的问题
原来用gulp打包时,能自动将生成的VSIX文件名赋值给steps.setup.outputs.packageName,换成vsce package后没法自动实现这个效果,有两种可靠的方式搞定:
方法一:通过package.json构造文件名
vsce默认生成的VSIX文件名遵循{package.json中的name}-{package.json中的version}.vsix规则,直接读取package.json的字段拼接即可:
- name: 提取包信息 id: package-info run: | echo "name=$(jq -r '.name' package.json)" >> $GITHUB_OUTPUT echo "version=$(jq -r '.version' package.json)" >> $GITHUB_OUTPUT - name: 打包扩展 run: vsce package - name: 设置packageName输出 id: setup run: echo "packageName=${{ steps.package-info.outputs.name }}-${{ steps.package-info.outputs.version }}.vsix" >> $GITHUB_OUTPUT
方法二:直接捕获vsce输出的文件名
vsce执行打包命令后会在日志里输出Generated: ./xxx-1.0.0.vsix这类内容,用命令提取这个路径里的文件名即可:
- name: 打包并捕获文件名 id: setup run: | # 提取vsce输出中的文件名 VSIX_FILE=$(vsce package | grep -oP 'Generated: \./\K.*') # 将文件名写入outputs echo "packageName=$VSIX_FILE" >> $GITHUB_OUTPUT
两种方法各有优劣:方法一依赖package.json的准确性,适合没有自定义打包命名的场景;方法二直接捕获实际生成的文件名,哪怕你用vsce package --packagePath指定了自定义路径/文件名,也能正确捕获。
内容的提问来源于stack exchange,提问作者Peter Wone
相关产品推荐
相关产品推荐

