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

如何在Yarn 3 PNP环境下避免生产构建缓存包含开发依赖

解决Yarn 3 PNP生产构建缓存包含开发依赖的问题

以下是几个实用方案,帮你缩小生产环境的.yarn/cache体积:

  • 使用--production参数安装依赖
    在生产构建环节执行安装命令时,加上--production标志,Yarn会仅下载并缓存生产依赖:

    yarn install --immutable --production
    

    也可以通过设置环境变量实现相同效果:

    NODE_ENV=production yarn install --immutable
    
  • 用workspaces focus命令精简缓存
    哪怕是单包项目,也可以用workspaces focus命令让Yarn自动清理开发依赖相关缓存,仅保留生产依赖的缓存文件:

    yarn workspaces focus --production
    
  • Docker多阶段构建(推荐)
    针对Docker镜像体积过大的问题,最有效的方式是拆分构建阶段:

    1. 第一阶段安装全量依赖(含开发依赖)完成项目构建;
    2. 第二阶段仅复制构建产物和必要的Yarn配置,再执行生产依赖安装,最终镜像的.yarn/cache只会包含生产依赖。

    示例Dockerfile:

    # 构建阶段:安装全量依赖并完成构建
    FROM node:18-alpine AS builder
    WORKDIR /app
    COPY package.json yarn.lock .yarnrc.yml ./
    COPY .yarn ./.yarn
    RUN yarn install --immutable
    RUN yarn build
    
    # 生产阶段:仅保留构建产物和生产依赖
    FROM node:18-alpine AS production
    WORKDIR /app
    COPY --from=builder /app/dist ./dist
    COPY package.json yarn.lock .yarnrc.yml ./
    COPY .yarn/plugins ./.yarn/plugins
    COPY .yarn/releases ./.yarn/releases
    RUN yarn install --immutable --production
    
  • 调整Yarn缓存配置(可选)
    可以在.yarnrc.yml中通过cachePatterns临时排除开发依赖的缓存规则,但需要区分开发/生产环境配置,灵活性不如前几种方案:

    # 生产环境缓存规则示例
    cachePatterns:
      - "!**/@types/**"
      - "!**/eslint/**"
      - "!**/jest/**"
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 09:41:31