5月29日 23:47

pnpm 在 CI/CD 中如何加速安装和构建?

pnpm 在 CI/CD 里提速,核心是三件事:固定依赖、缓存 store、只构建必要包。pnpm install --frozen-lockfile 保证流水线不重新解析依赖;缓存 pnpm store 可以避免每次从网络下载;Monorepo 里用 --filter 只跑受影响的包,比全量构建更省时间。

追问

为什么优先缓存 pnpm store,而不是只缓存 node_modules?

pnpm 的依赖真实内容放在 store,项目里的 node_modules 主要是链接。缓存 store 命中率更稳定,也更适合不同 job 复用。node_modules 可以缓存,但跨系统、跨 Node 版本时更容易出问题。

GitHub Actions 里怎么配?

actions/setup-nodecache: pnpm,再配合 pnpm/action-setup。如果要手动缓存,key 必须包含 pnpm-lock.yaml 的 hash,避免依赖变了还复用旧缓存。

Docker 构建怎么提速?

先复制 package.jsonpnpm-lock.yaml,安装依赖后再复制源码。这样源码改动不会让依赖层失效。BuildKit 环境还可以挂载 pnpm store 缓存。

Monorepo 怎么避免全量构建?

pnpm -r --filter "...[origin/main]" build 只构建受影响包;需要并行时加 --workspace-concurrency,不要盲目开满 CPU,容易把 CI 机器打爆。

写段代码

yaml
- uses: pnpm/action-setup@v4 with: version: 9 - uses: actions/setup-node@v4 with: node-version: 20 cache: pnpm - run: pnpm install --frozen-lockfile --prefer-offline - run: pnpm -r --filter "...[origin/main]" build
标签:PNPM