如何用npm命令列出直接依赖各自引入的依赖数量并定制输出格式?
实现需求的简便方案
当然有办法实现这个格式输出!下面给你两种简便的方式,不用复杂配置就能搞定:
方案一:使用 npm + jq(简洁高效)
如果你的环境已经安装了jq(一款轻量级JSON处理工具),可以直接用这条组合命令:
npm ls --depth=0 --only=production --json | jq -r '"my-app@\(.version) \(.path)\n" + ( .dependencies | to_entries | map("├── \(.key)@\(.value.version) (\(.value.dependencies | keys | length) dependencies)") | join("\n") )'
命令说明:
npm ls --depth=0 --only=production --json:让npm以JSON格式输出生产环境的直接依赖,结构化的数据更容易处理jq部分:负责解析JSON,提取项目名称、版本、路径,然后遍历每个依赖,统计它的直接子依赖数量,最后格式化成你想要的树形输出
方案二:纯Node.js脚本(无需额外工具)
如果不想安装额外工具,利用和npm一起安装的Node.js环境写个简单脚本就能实现:
- 在项目根目录创建一个名为
count-deps.js的文件,内容如下:
const { execSync } = require('child_process'); try { // 获取生产依赖的JSON数据 const depData = JSON.parse(execSync('npm ls --depth=0 --only=production --json', { encoding: 'utf8' })); // 输出项目基础信息 console.log(`${depData.name}@${depData.version} ${depData.path}`); // 遍历处理每个依赖 const dependencies = depData.dependencies || {}; for (const [pkgName, pkgInfo] of Object.entries(dependencies)) { const subDepCount = Object.keys(pkgInfo.dependencies || {}).length; // 可以根据需求调整这里的输出文本,比如把(0 dependencies)改成(no dependencies) console.log(`├── ${pkgName}@${pkgInfo.version} (${subDepCount} dependencies)`); } } catch (err) { console.error('获取依赖信息出错:', err.message); }
- 在终端运行脚本:
node count-deps.js
这个脚本会自动调用npm获取依赖数据,处理后输出你想要的格式,还加了简单的错误处理,避免意外报错。
内容的提问来源于stack exchange,提问作者Jonathan Bender
相关产品推荐
相关产品推荐

