You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在GitHub Action中实现npm依赖缓存(不缓存Docker镜像)

实现方案

你可以通过BuildKit的缓存挂载能力实现仅缓存npm依赖、不缓存整个Docker镜像的需求,具体操作如下:


方案:BuildKit缓存挂载(推荐,无镜像缓存)

这个方案只会缓存npm下载的依赖包,不会存储任何Docker镜像层,完全符合你的要求。

第一步:修改Dockerfile

调整npm ci指令,加入BuildKit专属的缓存挂载声明,挂载的内容不会写入镜像层:

FROM node
WORKDIR /app
ADD package*.json ./
# 新增--mount参数,将npm缓存目录挂载到宿主机临时缓存区
RUN --mount=type=cache,target=/root/.npm npm ci
ENV PATH /app/node_modules/.bin:$PATH

注:/root/.npm是官方node镜像的默认npm缓存路径,如果你使用非root用户运行容器,需要修改为对应用户的npm缓存路径。

第二步:修改GitHub Actions配置

新增缓存步骤存储npm依赖包,同时保留原有构建逻辑:

name: NPM build

on:
  push:
    branches:
      - main
jobs:
  build-npm-image:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      # 缓存npm依赖包
      - name: Cache npm dependencies
        uses: actions/cache@v4
        with:
          path: /tmp/.buildkit-cache
          key: ${{ runner.os }}-npm-${{ hashFiles('**/package-lock.json') }}
          restore-keys: |
            ${{ runner.os }}-npm-
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3
      - name: Build and Tag Node image
        id: build-ui-image
        run: |
          docker buildx build \
            --cache-from type=local,src=/tmp/.buildkit-cache \
            --cache-to type=local,dest=/tmp/.buildkit-cache \
            --no-cache \ # 新增这个参数即可完全禁用Docker镜像层缓存,只保留npm依赖缓存
            -t ui \
            -f ./ui/Dockerfile \
            .

配置中的--no-cache参数会强制所有镜像层重新构建,只有npm ci步骤会复用缓存的依赖包,跳过下载环节,构建速度和缓存镜像层的方案基本一致。


内容的提问来源于stack exchange,提问作者gamechanger17

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 11:48:01