如何在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 --productionDocker多阶段构建(推荐)
针对Docker镜像体积过大的问题,最有效的方式是拆分构建阶段:- 第一阶段安装全量依赖(含开发依赖)完成项目构建;
- 第二阶段仅复制构建产物和必要的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
相关产品推荐
相关产品推荐

