使用pnpm工作区时GitHub Actions中Node.js包二进制文件缺失
问题原因与排查方案
以下是GitHub Actions中出现deploy-script not found错误的常见原因及解决方法:
1. PNPM工作区的bin目录未加入系统PATH
本地环境中PNPM会自动将工作区内部包的bin路径注入终端PATH,但GitHub Actions默认环境可能未配置这一点,导致直接调用deploy-script时系统找不到可执行文件路径。
解决方法:
- 在调用命令前手动添加PNPM的bin路径到PATH:
export PATH="$PNPM_HOME:$PATH" - 或在GitHub Actions的workflow中通过设置环境变量持久化配置:
jobs: deploy: steps: - name: Setup PNPM uses: pnpm/action-setup@v2 with: version: 8 - name: Add PNPM bin to PATH run: echo "$PNPM_HOME" >> $GITHUB_PATH
2. 本地包未正确链接或安装
GitHub Actions执行pnpm install时,可能因lockfile状态、缓存或参数问题,导致deploy-script包未被正确链接到工作区依赖中。
解决方法:
- 确保
pnpm install未使用--ignore-workspace类参数,保留工作区包的链接逻辑。 - 检查
turbo.json的缓存配置,避免缓存跳过deploy-script的安装/链接步骤。 - 可在deploy命令前手动执行完整安装:
pnpm install && pnpm run deploy
3. deploy-script的构建步骤缺失或顺序错误
本地已构建.dist/main.js,但GitHub Actions工作流中可能未执行deploy-script的构建命令,或构建步骤晚于website的deploy命令执行。
解决方法:
- 在
turbo.json中配置任务依赖,确保构建先完成:{ "pipeline": { "deploy-script#build": {}, "website#deploy": { "dependsOn": ["deploy-script#build"] } } } - 在GitHub Actions中显式执行
deploy-script的构建命令:pnpm run --filter deploy-script build
4. 二进制文件的权限或路径配置问题
- 检查
.dist/main.js是否有可执行权限,在CI环境中可手动添加:chmod +x ./tools/deploy-script/.dist/main.js - 确认
deploy-script的package.json中bin字段路径正确,需相对于包根目录:{ "bin": { "deploy-script": ".dist/main.js" } }
5. Shebang兼容性问题
虽然已添加shebang,但GitHub Actions的Ubuntu环境中Node.js路径可能与本地不同。确保shebang使用通用格式#!/usr/bin/env node,而非固定路径(如#!/usr/local/bin/node),后者可能在CI环境中不存在。
内容的提问来源于stack exchange,提问作者Nick
相关产品推荐
相关产品推荐

