如何在Yarn 3.x中列出yarn.lock文件中的所有包版本?
解决Yarn v3+项目批量固定依赖版本及清理多版本问题的实操方案
一、统一package.json中的依赖版本格式
- 配置Yarn默认使用精确版本,避免后续新增依赖自动带
^:
在项目根目录新建或编辑.yarnrc.yml,添加:savePrefix: "" - 将现有依赖的
^x.x.x或latest替换为精确版本:
若要升级到当前兼容的最新精确版本并同步更新package.json,执行:
若要保留当前已安装的版本而非升级,可借助jq工具(需提前安装)批量提取yarn.lock中的精确版本替换package.json:yarn up --exact "*"# 更新生产依赖 jq '.dependencies |= with_entries(.value = (try (input | .[] | select(.name == .key) | .version) catch .value))' package.json <(yarn list --json | jq -r '.data[] | {name: .name, version: .version}') > temp.json && mv temp.json package.json # 更新开发依赖 jq '.devDependencies |= with_entries(.value = (try (input | .[] | select(.name == .key) | .version) catch .value))' package.json <(yarn list --json | jq -r '.data[] | {name: .name, version: .version}') > temp.json && mv temp.json package.json
二、清理单个包的多版本重复依赖
Yarn v3+自带的dedupe命令可自动合并兼容范围内的重复依赖:
- 查看当前重复依赖情况:
yarn dedupe --check - 强制合并到最高兼容版本(适合维护模式下保持稳定且相对新的版本):
yarn dedupe --strategy highest - 若存在版本冲突无法自动合并,直接在package.json中添加
resolutions字段强制指定版本:
执行"resolutions": { "冲突包名": "你要固定的精确版本号" }yarn install后,所有依赖将统一使用指定版本。
三、验证并锁定版本
- 执行
yarn install更新yarn.lock文件,确保所有依赖版本被精确锁定。 - 后续安装依赖时使用
yarn install --frozen-lockfile,强制沿用已锁定的版本,防止意外更新。
内容的提问来源于stack exchange,提问作者Remy
相关产品推荐
相关产品推荐

