Yarn Monorepo多版本文件问题修复及版本重置咨询
Yarn Workspaces Monorepo多版本文件错误修复方案
问题场景
- 基于Yarn Workspaces管理的NextJS Monorepo,默认分支
develop(测试环境)比main分支多若干提交 main分支仅包含预发布准备内容,通过从developcherry-pick提交并经PR合并develop分支执行yarn version check正常,但main分支因cherry-pick/回滚/压缩等操作,执行该命令时报错:
yarn version check ➤ YN0001: UsageError: Your current branch contains multiple versioning files; this isn't supported: - /Users/tbutcaru/Projects/my-nextjs-app/.yarn/versions/00648a82.yml - /Users/tbutcaru/Projects/my-nextjs-app/.yarn/versions/009a6542.yml - /Users/tbutcaru/Projects/my-nextjs-app/.yarn/versions/018f7b67.yml - /Users/tbutcaru/Projects/my-nextjs-app/.yarn/versions/0197a805.yml at h (/Users/tbutcaru/Projects/my-nextjs-app/.yarn/plugins/@yarnpkg/plugin-version.cjs:5:3539) at processTicksAndRejections (internal/process/task_queues.js:93:5) ....
- 报错中提到的
.yarn/versions/...文件在main分支实际不存在 - 已尝试以下方法均无效:
yarn version apply --allyarn version check --interactive- 升级至Yarn 3.4.0(原版本2.4.2)
- 删除
.yarn/versions目录、yarn.lock并重新安装依赖 - 手动升级所有私有包版本
- 从
develop分支复制.yarn/versions目录到main分支 - 在
.yarnrc.yml添加changesetIgnorePatterns: - '.yarn/**/*',虽解决多版本文件报错,但出现新错误:YN0000: @my-nextjs-app/shared-components@workspace:packages/shared-components has been modified but doesn't have a release strategy attached,且执行yarn version check --interactive添加发布策略后仍失败
修复方案
方案1:完全重置Yarn版本管理状态(推荐)
彻底清除main分支上的Yarn版本管理残留状态,重新初始化:
- 切换到
main分支并确保工作区干净:git checkout main git stash - 删除所有Yarn版本相关的隐藏文件和目录:
rm -rf .yarn/versions rm -rf .yarn/plugins/@yarnpkg/plugin-version.cjs rm -rf .yarn/version.yml # 若项目依赖changeset管理版本,先备份再删除 rm -rf .changeset - 重新安装依赖并初始化版本管理:
yarn install --immutable yarn version init - 为所有私有包设置发布策略:
按照提示为每个包选择合适的发布策略(如yarn version check --interactivepatch/minor/major或private) - 提交变更:
git add .yarn version.yml .changeset # 恢复changeset则添加该目录 git commit -m "Reset Yarn version management state for main branch"
方案2:清理Git缓存与未追踪文件
报错文件可能存在于Git缓存或本地未追踪文件中,执行以下操作清理:
- 清理Git缓存中的
.yarn/versions目录:git rm -r --cached .yarn/versions - 删除本地未追踪的
.yarn/versions目录:rm -rf .yarn/versions - 重新安装依赖:
yarn install --immutable - 再次执行版本检查:
yarn version check
方案3:精准配置Yarn忽略版本文件(规避方案)
通过Yarn版本插件专属配置,彻底忽略.yarn/versions目录的版本检查:
- 在项目根目录的
.yarnrc.yml中添加:version: ignorePaths: - ".yarn/versions/**/*" - 重置并重新配置包的发布策略:
该命令会清空原有策略,重新引导你为每个包设置发布规则yarn version check --interactive --reset - 执行版本检查:
yarn version check
内容的提问来源于stack exchange,提问作者Tanase Butcaru
相关产品推荐
相关产品推荐

