github action 中 Nodejs 的 pnpm --filter 和本地执行不一致?

发布于 1周前 作者 bupafengyu 来自 nodejs/Nestjs

Release.yml

name: Release

on: push: tags: - ‘v*’

jobs: release: name: Release runs-on: ubuntu-latest

steps:
  - name: Checkout Branch
    uses: actions/checkout@v4

  - name: Install pnpm
    uses: pnpm/action-setup@v2
    with:
      version: 8

  - name: Use Node.js 20
    uses: actions/setup-node@v4
    with:
      node-version: 20
      cache: pnpm

  - name: Display dir tree
    run: pnpm run buildBefore

  - name: Install Dependencies
    run: pnpm install

  - name: Build Packages
    run: pnpm run build

  - name: Publish to npm
    id: changesets
    uses: changesets/action@v1
    with:
      publish: pnpm changeset publish
    env:
      GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      NPM_TOKEN: ${{ secrets.NPM_TOKEN }}

github actions log

> @ build /home/runner/work/linzhe-tools/linzhe-tools
> rm -rf dist && pnpm run -r --filter ./packages/* build:src && pnpm run build:Dist

None of the selected packages has a “./packages/linzhe-tools” script

本地 log

> @ build D:\study\linzhe-tools
> rm -rf dist && pnpm run -r --filter ./packages/* build:src && pnpm run build:Dist

Scope: 3 of 6 workspace projects

github actions 会出现一个莫名其妙的脚本“./packages/linzhe-tools”,说找不到


github action 中 Nodejs 的 pnpm --filter 和本地执行不一致?

3 回复

pnpm run -r --filter ./packages/* build:src 改成 pnpm run -r --filter=./packages/* build:src ,filter 的参数改成“=”就可以了🤯


看起来像是 ./packages/* 被 shell 展开了?加了个双引号括住它试试

pnpm run -r --filter “./packages/*” build:src

在 GitHub Actions 中使用 Node.js 的 pnpm 时,遇到 --filter 参数的行为与本地执行不一致的问题,通常可能是由于环境差异或配置问题导致的。以下是一些可能的解决步骤和排查方法:

  1. 确认环境一致性: 确保 GitHub Actions 中的 Node.js 版本和 pnpm 版本与本地环境完全一致。可以在 GitHub Actions 的配置文件中指定版本,例如:

    node_js:
      - version: "14"  # 指定 Node.js 版本
    

    并在脚本中安装特定版本的 pnpm:

    curl -fSL https://get.pnpm.io/install.sh | sh -
    source $HOME/.pnpm-global/bin/pnpm-env.sh
    
  2. 检查 pnpm-workspace.yaml 配置: 确保 pnpm-workspace.yaml 文件(如果存在)在 GitHub Actions 的工作目录中正确配置,且路径与本地一致。

  3. 使用详细日志输出: 在 GitHub Actions 中运行 pnpm 命令时,添加 --verbose 标志以获取更详细的输出,这有助于诊断问题:

    pnpm --filter=<your-filter> <your-command> --verbose
    
  4. 检查依赖和缓存: 确认 GitHub Actions 中没有使用本地缓存的依赖项,这可能会导致行为不一致。可以尝试禁用缓存或使用 pnpm store prune 清理存储。

  5. 脚本调试: 如果问题依旧存在,可以尝试在本地和 GitHub Actions 中运行更简单的命令来逐步缩小问题范围。

通过上述步骤,通常可以定位并解决 pnpm --filter 在 GitHub Actions 中与本地执行不一致的问题。

回到顶部