验证 package.json 依赖值中的 semver 版本

Posted

技术标签:

【中文标题】验证 package.json 依赖值中的 semver 版本【英文标题】:validate semver version in package.json dependency value 【发布时间】:2019-03-18 03:54:09 【问题描述】:

在验证是否安装了正确版本的依赖项时,我遇到了这样的问题:

package with name csvtojson is not satisfied. Installed version: 0.4.5 desired version: github:Keyang/node-csvtojson#16ba2237e0bd96d6e3773e4c4d6e36c70efa620e

我正在尝试使用 semver 包来验证所需的依赖版本:

const semver = require('semver');
const satisfies = semver.satisfies(installedVersion, desiredVersion);

在 package.json 中,我们可能会看到:

"csvtojson": "^1.12.0"

"csvtojson":"github:Keyang/node-csvtojson#16ba2237e0bd96d6e3773e4c4d6e36c70efa620e"

我想要做的是确定安装的依赖项是否满足所需依赖项的版本范围。

如果所需的版本不是 semverish,我愿意跳过它,但我对此没有很好的测试,有人知道如何跳过看起来不是 semverish 的所需版本吗?

也许使用这样的正则表达式:

/.*[0-9]1,5\.[0-9]1,5\.[0-9]1,5/

?

【问题讨论】:

你的正则表达式太简单了。有一个已知良好/经过测试的正则表达式等待合并到您可能会发现有用的 semver 站点:github.com/semver/semver/pull/460 @jwdonahue 谢谢,以波浪号或插入符号开头的 semver 版本呢?我必须先用semver.clean() 清理它们吗? 引用的正则表达式是一个起点。它仅涵盖孤立的 semver 字符串本身。添加/测试您需要的内容应该不会太难。按照与 PR 相关的相关问题的链接,您会找到对正则表达式测试页面和大量测试数据的引用。 请务必发布您的最终解决方案作为您自己问题的答案。 【参考方案1】:

这里的这个 RegExp 正在验证所有场景:

^(\d|[1-9]\d*)\.(\d|[1-9]\d*)\.(\d|[1-9]\d*)(-(0|[1-9A-Za-z-][0-9A-Za-z-]*|[0-9]*[A-Za-z-][0-9A-Za-z-]*)(\.(0|[1-9A-Za-z-][0-9A-Za-z-]*|[0-9]*[A-Za-z-][0-9A-Za-z-]*))*)?(\+[0-9A-Za-z-]+(\.[0-9A-Za-z-]+)*)?$

来源:https://brunorb.com/untangling-semver/

【讨论】:

以上是关于验证 package.json 依赖值中的 semver 版本的主要内容,如果未能解决你的问题,请参考以下文章

npm安装package.json中的模块依赖

package.json 依赖项中的“下一个”到底是啥意思?

npm安装package.json文件中的模块依赖

npm install:有没有办法忽略 package.json 中的特定依赖项

如何更新 Package.json 中的依赖项

将库从依赖项重定位到 package.json 中的 devDependencies 块的命令?