npm:如何找到特定版本的节点模块的最新兼容版本?
Posted
技术标签:
【中文标题】npm:如何找到特定版本的节点模块的最新兼容版本?【英文标题】:npm: how to find the latest compatible version of a dependency for a node module at a specific version? 【发布时间】:2020-08-10 08:11:01 【问题描述】:有没有办法确定特定模块的最新版本与特定版本的另一个模块兼容?
例如,运行npm install @angular/http
会拉取依赖于rxjs@^6.0.0
的@angular/http@7.2.16
,但是项目中已经存在rxjs
的较低版本——rxjs@5.5.11
,并且碰撞这个版本需要更新很多其他模块,我想避免。
是否有命令可以显示与rxjs@5.5.11
兼容的@angular/http
的最新版本是x.y.z
?
有像npmvet
这样的工具擅长显示当前项目中不匹配的版本,但找不到任何工具可以显示哪些版本可用于解决兼容性冲突。
【问题讨论】:
【参考方案1】:它看起来并不存在工具,但在这一行命令中使用 npmvet
和 npm view
有助于我完成这项任务:
npmvet -r json | jq '.[] | .name + "@" + .packageVersion' | sed -e 's/"//g' | awk 'print "echo "$0"; npm view "$0" dependencies"'|sh | tee ../deps.txt
输出如下:
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
如果您像我一样,并且已经拥有一个预先存在的 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'
我在typescript@3.7.5
,但prettier-eslint@11.0.0
想要typescript@3.9.3
。
然后我运行npm i typescript@3.9.3
来满足依赖关系,npmvet
现在匹配该包:
【讨论】:
以上是关于npm:如何找到特定版本的节点模块的最新兼容版本?的主要内容,如果未能解决你的问题,请参考以下文章
如何找到具有特定依赖关系的 NPM 模块版本 - 例如,哪个版本的 webpack-cli 与 webpack@4.46.0 一起使用?
如何运行 `npm update` 以便将版本号更新为 package.json 中兼容的最新版本?