npm:如何为特定版本的节点模块找到最新兼容版本的依赖项?

ccp*_*zza 6 version dependency-management node.js npm

有没有办法确定与特定版本的另一个模块兼容的特定模块的最新版本?

例如,运行依赖于 的npm install @angular/httppulls ,但项目中已经存在 较低版本的,并且撞击这个版本将需要更新很多其他模块,我想避免这种情况。@angular/http@7.2.16rxjs@^6.0.0rxjsrxjs@5.5.11

是否有一个命令可以显示@angular/http与之兼容的最新版本rxjs@5.5.11x.y.z

有一些工具npmvet可以很好地显示当前项目中不匹配的版本,但找不到任何可以显示哪些版本可用于解决兼容性冲突的工具。

use*_*608 4

它看起来不像一个工具存在,但是在这一行命令中使用npmvetandnpm view有助于我分解这个任务:

npmvet -r json | jq '.[] | .name + "@" + .packageVersion' | sed -e 's/"//g' | awk '{print "echo "$0"; npm view "$0" dependencies"}'|sh | tee ../deps.txt
Run Code Online (Sandbox Code Playgroud)

其输出如下:

prismjs@1.23.0 !
prop-types@15.7.2
{
  'loose-envify': '^1.4.0',
  'object-assign': '^4.1.1',
  'react-is': '^16.8.1'
}
pug@3.0.1 !
pug-code-gen@2.0.3 !
raphael@2.2.8
{ 'eve-raphael': '0.5.0' }
rc-time-picker@3.4.0
{
  'babel-runtime': '6.x',
  classnames: '2.x',
  moment: '2.x',
  'prop-types': '^15.5.8',
  'rc-trigger': '^2.2.0'
}
react-collapsible@2.6.2
Run Code Online (Sandbox Code Playgroud)

如果您像我一样并且有一个预先存在的 package.json ,其中包含许多已允许/要求随着时间的推移而变化的包/库,您可以使用此输出来帮助取消选择最佳匹配的版本,直到有希望npmvet出现绿色的。

例如我从 npmvet 开始:

在此输入图像描述

搜索我的 deps.txt,我发现:

prettier-eslint@11.0.0
{
  '@typescript-eslint/parser': '^3.0.0',
  'common-tags': '^1.4.0',
  dlv: '^1.1.0',
  eslint: '^6.8.0',
  'indent-string': '^4.0.0',
  'lodash.merge': '^4.6.0',
  'loglevel-colored-level-prefix': '^1.0.0',
  prettier: '^2.0.0',
  'pretty-format': '^23.0.1',
  'require-relative': '^0.8.7',
  typescript: '^3.9.3',
  'vue-eslint-parser': '~7.1.0'
}
Run Code Online (Sandbox Code Playgroud)

我在typescript@3.7.5,但prettier-eslint@11.0.0想要typescript@3.9.3

然后我运行npm i typescript@3.9.3以满足依赖关系,npmvet现在正在匹配该包:

在此输入图像描述