github action 中 Nodejs 的 pnpm --filter 和本地执行不一致?
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 和本地执行不一致?
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
参数的行为与本地执行不一致的问题,通常可能是由于环境差异或配置问题导致的。以下是一些可能的解决步骤和排查方法:
-
确认环境一致性: 确保 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
-
检查
pnpm-workspace.yaml
配置: 确保pnpm-workspace.yaml
文件(如果存在)在 GitHub Actions 的工作目录中正确配置,且路径与本地一致。 -
使用详细日志输出: 在 GitHub Actions 中运行 pnpm 命令时,添加
--verbose
标志以获取更详细的输出,这有助于诊断问题:pnpm --filter=<your-filter> <your-command> --verbose
-
检查依赖和缓存: 确认 GitHub Actions 中没有使用本地缓存的依赖项,这可能会导致行为不一致。可以尝试禁用缓存或使用
pnpm store prune
清理存储。 -
脚本调试: 如果问题依旧存在,可以尝试在本地和 GitHub Actions 中运行更简单的命令来逐步缩小问题范围。
通过上述步骤,通常可以定位并解决 pnpm --filter
在 GitHub Actions 中与本地执行不一致的问题。