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

如何从Yarn 2的.yarn/cache提取生产依赖用于构建Docker镜像

Yarn 2 零安装场景下提取生产依赖实现Docker多阶段构建的方案

Yarn 2 原生支持直接读取本地.yarn/cache缓存仅安装生产依赖,无需重新下载资源,可以满足你复用缓存、缩小镜像体积的需求。

核心操作方法

你可以通过指定--modules-folder参数,将生产依赖单独提取到指定目录,全程复用本地缓存不会触发远程下载,命令如下:

yarn install --production --immutable-cache --modules-folder ./prod_node_modules

参数说明:

  • --production:仅安装生产依赖,跳过devDependencies
  • --immutable-cache:强制仅读取本地已有缓存,不允许下载新的依赖包,完全复用.yarn/cache中的内容
  • --modules-folder ./prod_node_modules:指定依赖安装到./prod_node_modules目录,方便后续单独拷贝

Docker多阶段构建参考配置

按照上述逻辑可以编写如下Dockerfile,最大化利用缓存同时最小化镜像体积:

# 第一阶段:依赖提取与项目构建
FROM node:18-alpine AS builder
WORKDIR /app
# 优先拷贝Yarn零安装相关文件,利用Docker层缓存加速构建
COPY .yarn ./.yarn
COPY .yarnrc.yml package.json yarn.lock ./
# 仅从本地缓存提取生产依赖到单独目录
RUN yarn install --production --immutable-cache --modules-folder ./prod_deps
# 拷贝项目源码执行构建(如TS编译、前端打包等,无构建步骤可省略)
COPY . .
RUN yarn build

# 第二阶段:运行镜像,仅保留必要文件
FROM node:18-alpine AS runtime
WORKDIR /app
# 直接拷贝预提取的生产依赖
COPY --from=builder /app/prod_deps ./node_modules
# 拷贝构建产物与运行所需配置
COPY --from=builder /app/dist ./dist
COPY package.json ./

CMD ["node", "dist/index.js"]

额外优化说明

  • 如果你的项目是Monorepo(多工作空间)结构,可以使用yarn workspaces focus <目标工作空间名称> --production --cached命令,仅提取对应工作空间的生产依赖,进一步缩减依赖体积
  • 最终运行镜像不需要保留.yarn目录、yarn.lock等文件,仅需拷贝node_modules、构建产物和package.json即可
  • 可以根据实际项目需求调整node镜像版本,优先选择alpine变体减少基础镜像体积

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 15:24:04