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

如何解决GitHub Workflow YAML中含括号Linux命令失效问题?

解决GitHub Workflow中删除非dist目录及发布dist内容的问题

先修正YAML语法错误

你的Workflow配置里steps的缩进位置错误,它应该属于publish-gpr job的子节点,和runs-on、permissions同级,否则Workflow会直接报错。

解决rm -rf !(dist)的失效问题

你遇到的核心问题原因:

  1. YAML中!是特殊标记字符,直接写!(dist)会触发语法报错;
  2. 加双引号后,bash的extglob扩展(即!(pattern)匹配语法)会失效,命令会把!(dist)当成字面文件名,自然找不到对应内容,所以没效果。

方案一:开启extglob并正确处理YAML特殊字符

bash的!(dist)属于扩展通配符,需要先开启extglob选项,块级脚本中中间的!不会被YAML解析为特殊标记,可直接使用:

name: Node.js Package

on:
  release:
    types: [created]

jobs:
  publish-gpr:
    runs-on: ubuntu-latest
    permissions: write-all
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-node@v3
        with:
          node-version: 16
      - run: npm ci
      - run: npm run build
      - run: |
          # 开启bash扩展通配符支持
          shopt -s extglob
          # 删除根目录下除dist外的所有内容
          rm -rf !(dist)
          # 将dist内的内容移到根目录
          cd dist && cp -R ./* ../ && cd ..
          # 删除空的dist目录
          rm -rf dist
      - run: npm publish

方案二:用find命令替代(更兼容,无需依赖bash扩展)

如果不想依赖bash的extglob特性,可用find命令实现相同效果,完全避开YAML特殊字符问题:

name: Node.js Package

on:
  release:
    types: [created]

jobs:
  publish-gpr:
    runs-on: ubuntu-latest
    permissions: write-all
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-node@v3
        with:
          node-version: 16
      - run: npm ci
      - run: npm run build
      - run: |
          # 删除当前目录下(仅一级)除自身和dist外的所有内容
          find . -maxdepth 1 -not -name '.' -not -name 'dist' -exec rm -rf {} +
          # 移动dist内容到根目录并删除dist
          cd dist && cp -R ./* ../ && rm -rf ../dist
      - run: npm publish

额外优化建议

如果你的package.json不在dist目录中,可以先复制进去,直接在dist目录执行npm publish,省去大量文件删除和移动的操作,更简洁高效:

# ...前面步骤保持不变
- run: npm run build
- run: |
    # 复制package.json到dist目录(按需添加README、LICENSE等文件)
    cp package.json README.md LICENSE dist/
    # 进入dist目录直接发布
    cd dist && npm publish

内容的提问来源于stack exchange,提问作者Khanon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 20:35:09