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

如何便捷获取项目中已安装包的resolved版本及深层依赖全版本?

获取Yarn项目中已安装包的所有resolved版本的优雅方案

针对你需要获取项目中所有已安装包(包括依赖树深层)的具体resolved版本的需求,我整理了几个简洁实用的方法,比直接解析yarn.lock或手动查看node_modules要优雅得多:

方法1:用Yarn自带命令+JSON解析

Yarn的yarn list其实可以输出精确版本,只是默认格式不好读,结合--json选项和jq工具就能轻松提取所有版本:

首先确保你已经安装了jq(一个轻量的JSON解析工具),然后运行:

yarn list --pattern "<你的包名>" --json | jq '.data.trees[] | select(.name | test("<你的包名>@")) | .name'

这个命令会输出所有匹配的包名+版本号,比如"lodash@4.17.21"。如果需要同时获取resolved URL,这个方法可能满足不了,建议看方法2。

方法2:解析yarn.lock的Node脚本

如果需要获取resolved字段的具体URL,写个简单的Node脚本是最直接的方式,用Yarn官方的@yarnpkg/lockfile包来解析锁文件:

  1. 先安装依赖:
npm install @yarnpkg/lockfile --save-dev
  1. 创建脚本get-package-versions.js:
const fs = require('fs');
const lockfile = require('@yarnpkg/lockfile');

// 读取并解析yarn.lock
const lockContent = fs.readFileSync('yarn.lock', 'utf8');
const parsedLock = lockfile.parse(lockContent);

if (parsedLock.type !== 'success') {
  console.error('解析yarn.lock失败,请检查文件格式');
  process.exit(1);
}

// 获取目标包名
const targetPkg = process.argv[2];
if (!targetPkg) {
  console.error('请传入要查询的包名,比如:node get-package-versions.js lodash');
  process.exit(1);
}

// 收集所有版本和对应的resolved URL
const pkgInfo = new Map();
for (const [key, value] of Object.entries(parsedLock.object)) {
  if (key.startsWith(`${targetPkg}@`)) {
    pkgInfo.set(value.version, value.resolved);
  }
}

// 输出结果
console.log(`包 ${targetPkg} 的所有已安装版本及resolved地址:`);
pkgInfo.forEach((resolved, version) => {
  console.log(`- 版本 ${version}: ${resolved}`);
});
  1. 运行脚本查询目标包:
node get-package-versions.js <你的包名>

这个脚本会清晰列出每个版本对应的resolved URL,完全满足你对比版本的需求。

方法3:直接扫描node_modules(无需额外工具)

如果不想装任何依赖,用系统自带的find命令也能快速获取所有已安装版本:

find node_modules -name "<你的包名>" -type d -exec grep -A 2 '"version"' {}/package.json \;

这个命令会遍历node_modules中所有目标包的package.json,输出版本信息,缺点是没有resolved URL,但胜在零依赖,适合快速查询。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 18:44:06