我能找到一个包裹吗';www.npmjs.com上的对等依赖关系

我能找到一个包裹吗';www.npmjs.com上的对等依赖关系,npm,Npm,我有一个项目,通过NPM安装了大约50个软件包。经过几个月的忽视,我现在需要更新大多数包,导致几个不匹配的对等依赖项。为了找到包版本的正确组合,我希望查看某个包的所有版本的对等依赖关系 我在www.npmjs.com的哪里可以找到包的对等依赖关系 包的页面显示“依赖项”和“依赖项”,但我相信这些是正常的依赖项,而不是“对等依赖项”。该网站不公开对等依赖项信息。但是,此元数据驻留在npm注册表端点:https://registry.npmjs.org/ 通过命令行,您可以使用命令访问它。例如: n

我有一个项目,通过NPM安装了大约50个软件包。经过几个月的忽视,我现在需要更新大多数包,导致几个不匹配的对等依赖项。为了找到包版本的正确组合,我希望查看某个包的所有版本的对等依赖关系

我在www.npmjs.com的哪里可以找到包的对等依赖关系

包的页面显示“依赖项”和“依赖项”,但我相信这些是正常的依赖项,而不是“对等依赖项”。

该网站不公开对等依赖项信息。但是,此元数据驻留在npm注册表端点:
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
    ...