You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 02:24:55