使用 github workflow 的 actions/setup-node 工作流,安装 pnpm 失败的 bug

使用 github workflow 的 actions/setup-node 工作流,安装 pnpm 失败的 bug

在 github workflow 中,我们经常用 actions/setup-nodepnpm/action-setup 这两个工作流,来完成流水线安装 node 环境,并准备包管理器的需求。

我的工作流写法如下:

yaml 复制代码
jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
      - name: 检出分支
        uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: 安装pnpm
        uses: pnpm/action-setup@v4
        with:
          run_install: true

      - name: 安装node
        uses: actions/setup-node@v4
        with:
          node-version: 22.14.0
          cache: "pnpm"

这段写法产生了以下故障,这里只截取一小部分:

log 复制代码
/home/runner/setup-pnpm/node_modules/.bin/pnpm store path --silent
/home/runner/setup-pnpm/node_modules/.bin/store/v10
Error: Dependencies lock file is not found in /home/runner/work/*** . Supported file patterns: pnpm-lock.yaml

问题起因

因为 actions/setup-node 工作流会默认检索项目内已经存在的包依赖锁文件,所以在查询包锁文件时,找不到就报错了。

如图所示:

具体缘由见以下文档所述:

按照官网文档,我应该提交 pnpm-lock.yaml 锁文件。

个人开发习惯导致必须另辟蹊径

由于我的开发习惯,是不上传任何包锁文件的。我不喜欢上传巨大的,频繁变更的,自动生成的文件到 git 仓库,所以在工作流场景下,自然是无法提供任何包锁文件的。

类似的情况还有在 vercel 流水线部署项目时,vercel 会根据是否存在包锁文件来决定包管理器的版本号。比如我的项目在根目录内不提供任何 pnpm-lock.yamlvercel 就使用了低版本的 pnpm6,而不是我在 packageManager 内配置的最新版 pnpm。不提供 pnpm-lock.yaml 锁文件确实容易给流水线环境带来误导。

但是我的场景下,肯定不能提交锁文件。在使用 taze 实现高强度依赖升级的情况下,依赖锁文件会频繁更新,其提交到仓库的意义不大。

临时性解决方案

在设置 pnpm 缓存前,先安装依赖,生成 pnpm-lock.yaml ,避免 actions/setup-node 出现识别故障。

更新后的工作流文件如下:

yaml 复制代码
jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
      - name: 检出分支
        uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: 安装pnpm
        uses: pnpm/action-setup@v4
        with:
          run_install: true

      - name: 安装依赖(尝试生成lockfile)
        run: pnpm install --frozen-lockfile

      - name: 安装node
        uses: actions/setup-node@v4
        with:
          node-version: 22.14.0
          cache: "pnpm"
相关推荐
小毛驴8502 小时前
HTTP方法GET,HEAD,POST,PUT,PATCH,DELETE,OPTIONS,TRACE,RESTful API设计的核心详解
http·github·restful
lkbhua莱克瓦246 小时前
Java基础——面向对象进阶复习知识点8
java·笔记·github·学习方法
逛逛GitHub8 小时前
这个牛逼的股票市场平台,在 GitHub 上开源了。
前端·github
tokepson9 小时前
记录 | 个人开发库推送至PyPi流程梳理(ChatGPT to Markdown 工具发布完整流程)
python·github·技术·记录
掘金安东尼10 小时前
前端周刊第436期(2025年10月13日–10月19日)
前端·javascript·github
Scabbards_10 小时前
github 个人静态网页搭建(一)部署
github·web
深思慎考13 小时前
Ubuntu 系统 RabbitMQ 安装指南与使用(含 C++ 客户端与 SSL 错误解决)
c++·ubuntu·rabbitmq·github·rabbitmqpp
WindrunnerMax13 小时前
从零实现富文本编辑器#8-浏览器输入模式的非受控DOM行为
前端·前端框架·github
这周也會开心14 小时前
通过ssh连接GitHub远程仓库
运维·ssh·github
不会写DN14 小时前
用户头像文件存储功能是如何实现的?
java·linux·后端·golang·node.js·github