我有一个项目,通过 NPM 安装了大约 50 个软件包。经过几个月的忽视,我现在需要更新大多数软件包,导致几个不匹配的对等依赖关系。为了找到包版本的正确组合,我想查看某个包的所有版本的对等依赖关系。
在 www.npmjs.com 上哪里可以找到包的对等依赖项?
包的页面显示“依赖项”和“依赖项”,但我相信这些是正常的依赖项,而不是“对等依赖项”。
www.npmjs.com网站不公开对等依赖关系信息。但是,此元数据驻留在 npm 注册表端点:。https://registry.npmjs.org/
通过命令行,您可以使用npm view命令来访问它。例如:
npm view <pkg_name> peerDependencies
Run Code Online (Sandbox Code Playgroud)
注意:您需要<pkg_name>用真实的包名称替换该部分。
上述命令将列出peerDependencies给定包的最新版本。
我想查看某个包的所有版本的对等依赖关系。
为了实现这一目标,您可以:
运行以下命令获取给定包的所有版本
npm view <pkg_name> peerDependencies
Run Code Online (Sandbox Code Playgroud)
注意这里我们检查babel-loader但这可以是任何有效的包名称
这将打印:
npm view babel-loader versions --json
Run Code Online (Sandbox Code Playgroud)然后运行以下命令来获取前面列出的每个版本的对等依赖关系:
[
"4.0.0",
"4.1.0",
"4.2.0",
"4.3.0",
"5.0.0",
...
]
Run Code Online (Sandbox Code Playgroud)
印刷:
npm view babel-loader@4.0.0 peerDependencies --json
^^^^^^
Run Code Online (Sandbox Code Playgroud)
再次重复 - 与之前类似,但更改@<version>后缀,即@4.1.0在下面的示例中。
{
"babel-core": "^4.0.0",
"webpack": "^1.4.5"
}
Run Code Online (Sandbox Code Playgroud)
这打印:
npm view babel-loader@4.1.0 peerDependencies --json
^^^^^^
Run Code Online (Sandbox Code Playgroud)
等等...
您可能需要考虑通过创建Node.js脚本来自动执行上述步骤,如下所示。这利用了nodejsexecSync()方法来处理必要的命令,但是如果您希望它异步运行,npm您可以更改它以利用该方法:exec()
脚本.js
{
"babel-core": "^4.7.0",
"webpack": "^1.4.5"
}
Run Code Online (Sandbox Code Playgroud)
然后运行以下命令来调用node.js脚本:
node ./path/to/script.js
Run Code Online (Sandbox Code Playgroud)
注意:您需要./path/to/根据需要重新定义零件。
babel-loader给定当前分配给PKG_NAME变量的值script.js,您将在控制台中看到类似以下内容的信息:
Run Code Online (Sandbox Code Playgroud)> 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 ...
完成后,它将.json向磁盘写入一个名为 的文件babel-loader-peer-deps.json,其中包含以下内容:
babel-loader-peer-deps.json
const fs = require('fs');
const sh = require('child_process').execSync;
const PKG_NAME = 'babel-loader'; // <-- Change the package name.
const destFilePath = PKG_NAME.replace(/\//g, '_') + '-peer-deps.json';
const versions = JSON.parse(sh('npm view ' + PKG_NAME + ' versions --json').toString());
const data = versions.map(function(semver) {
const pkgVersion = PKG_NAME + '@' + semver;
console.log('> Fetching peerDependencies info for: ' + pkgVersion);
const peerDeps = sh('npm view ' + pkgVersion +
' peerDependencies --json').toString().replace(/[\r\n]/, '');
return {
name: pkgVersion,
peerDependencies: peerDeps ? JSON.parse(peerDeps) : null
}
});
fs.writeFileSync(destFilePath, JSON.stringify(data, null, 2));
console.log('\nDone !');
Run Code Online (Sandbox Code Playgroud)
如果您希望将 https 请求数量减少GET到 1 个,那么我建议使用内置的 Nodejshttps.get()从端点获取 JSON 数据https://registry.npmjs.org/。
下面的示例要点会快得多。
获取对等 deps.js
node ./path/to/script.js
Run Code Online (Sandbox Code Playgroud)
用法:
然后通过命令行工具运行以下命令来调用get-peer-deps.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
...
Run Code Online (Sandbox Code Playgroud)
注意:调用时get-peer-deps.js需要提供包名称作为参数。在上面的例子中我们传入babel-loader. 可以将其替换为您喜欢的任何有效包名称。例如,在下一个示例中,我们传入@angular/forms:
[
{
"name": "babel-loader@4.0.0",
"peerDependencies": {
"babel-core": "^4.0.0",
"webpack": "^1.4.5"
}
},
{
"name": "babel-loader@4.1.0",
"peerDependencies": {
"babel-core": "^4.7.0",
"webpack": "^1.4.5"
}
},
{
"name": "babel-loader@4.2.0",
"peerDependencies": {
"babel-core": "^4.7.0",
"webpack": "^1.4.5"
}
},
...
]
Run Code Online (Sandbox Code Playgroud)
生成的.json文件将按照前面所述进行格式化,并将保存到所在的同一目录中get-peer-deps.js。
| 归档时间: |
|
| 查看次数: |
1115 次 |
| 最近记录: |