我能找到一个包裹吗';www.npmjs.com上的对等依赖关系
我有一个项目,通过NPM安装了大约50个软件包。经过几个月的忽视,我现在需要更新大多数包,导致几个不匹配的对等依赖项。为了找到包版本的正确组合,我希望查看某个包的所有版本的对等依赖关系 我在www.npmjs.com的哪里可以找到包的对等依赖关系 包的页面显示“依赖项”和“依赖项”,但我相信这些是正常的依赖项,而不是“对等依赖项”。该网站不公开对等依赖项信息。但是,此元数据驻留在npm注册表端点:我能找到一个包裹吗';www.npmjs.com上的对等依赖关系,npm,Npm,我有一个项目,通过NPM安装了大约50个软件包。经过几个月的忽视,我现在需要更新大多数包,导致几个不匹配的对等依赖项。为了找到包版本的正确组合,我希望查看某个包的所有版本的对等依赖关系 我在www.npmjs.com的哪里可以找到包的对等依赖关系 包的页面显示“依赖项”和“依赖项”,但我相信这些是正常的依赖项,而不是“对等依赖项”。该网站不公开对等依赖项信息。但是,此元数据驻留在npm注册表端点:https://registry.npmjs.org/ 通过命令行,您可以使用命令访问它。例如: n
https://registry.npmjs.org/
通过命令行,您可以使用命令访问它。例如:
npm view <pkg_name> peerDependencies
注意我们在这里检查,但这可能是任何有效的包名
这将打印:
[
"4.0.0",
"4.1.0",
"4.2.0",
"4.3.0",
"5.0.0",
...
]
npm视图巴别塔-loader@4.0.0peerDependencies——json
^^^^^^
印刷品:
{
“巴别塔核心”:“^4.0.0”,
“网页包”:“^1.4.5”
}
再次重复-与之前类似,但更改@
后缀,即下面示例中的@4.1.0
npm视图巴别塔-loader@4.1.0peerDependencies——json
^^^^^^
这张照片是:
{
“巴别塔核心”:“^4.7.0”,
“网页包”:“^1.4.5”
}
等等使任务自动化: <>您可能想通过创建NoDE.js脚本来自动实现上面的步骤,如下所示。这利用nodejs方法来发出必要的
npm
命令,但是如果希望异步运行,可以将其更改为使用该方法:
script.js
const fs=require('fs');
const sh=require('child_process')。execSync;
const PKG_NAME='babel loader';//正在获取%s…,pkgName)的对等依赖项信息;
var响应=“”;
在('data',函数(块)上重新测试{
反应+=组块;
});
resest.on('end',function()){
processJsonResponse(响应);
});
}).on('error',函数(err){
控制台错误(err);
});
/**
*处理JSON响应以提取必要的元数据并保存
*将生成的JSOn发送到磁盘。
*@param{String}data-来自npm注册表的JSON响应。
*/
函数processJsonResponse(数据){
const versions=JSON.parse(data.versions);
const semvers=Object.keys(版本);
const peerdpsinfo=semvers.map(函数(semver){
const current=版本[semver];
返回{
名称:current.name+'@'+current.version,
peerDependencies:current.peerDependencies | | null
};
});
writeFile(destFilePath,JSON.stringify(peerDepsInfo,null,2),函数(err){
如果(错误){
返回console.log(err);
}
console.log('>Done.Saved结果到:\n%s',destFilePath);
});
}
用法:
然后通过命令行工具运行以下命令以调用get peer deps.js
:
node./path/to/get-peer-deps.js babel loader
^^^^^^^^^^^^
注意:调用get peer deps.js
时,必须提供包名作为参数。在上面的示例中,我们传入了babel loader
。可以用您喜欢的任何有效包名替换。例如,在下一个示例中,我们传入@angular/forms
:
node./path/to/get-peer-deps.js@angular/forms
^^^^^^^^^^^^^^
生成的
.json
文件将按照前面所述进行格式化,并将保存到get peer deps.js
所在的同一目录中。谢谢您的回复!太糟糕了,网站不能以这种方式使用,如果我正确理解NPM依赖关系,正常依赖关系是自动安装的,但对等依赖关系必须手动安装,这意味着对等依赖关系正是网站可以使用的地方。你的剧本很好!但是,当在包含正斜杠的包上使用时,它会给出一个错误。例如,我在“@angular/forms”上试过。通过将“destFilePath”更改为“output.json”实现了这一功能。关于作用域包(即名称中带有/
的包),我已经编辑了答案以提供修复。现在,它将名称中的任何/
替换为.
。给定@angular/forms
,结果文件将命名为@angular\u forms-peer-deps.json
。很好!我一直在试验,发现您可以在请求信息的软件包版本中使用通配符。这意味着您可以使用npm view@angular/forms@*.peerDependencies
获取所有版本。您可能需要相应地调整脚本,因为如果包有很多版本,则当前版本需要一段时间才能运行。使用通配符,例如npm view@angular/forms@**.
(带或不带--json
标志)不会生成有效的json数据,因此无法对其进行解析。如果您想减少对npm注册表的https GET
请求的数量,我建议您开发自己的nodejs脚本,使用内置(或其他一些现有的npm pkg)从https://registry.npmjs.org/@角度/形状
端点,然后尝试处理返回的数据,看看是否可以提取所需的内容。或者使用bash运行curl
命令,例如curl-xgethttps://registry.npmjs.org/%40angular%2Fforms
然后使用命令行JSON解析器(如或)操作数据并提取所需内容。
node ./path/to/script.js
> Fetching peerDependencies info for: babel-loader@4.0.0
> Fetching peerDependencies info for: babel-loader@4.1.0
> Fetching peerDependencies info for: babel-loader@4.2.0
...