Npm版本控制 - 这个边缘案例如何工作?

时间:2014-12-23 21:20:14

标签: node.js npm versioning

我试图找出npm版本控制是如何工作的,因为我陷入了两个无效的软件包。参考my other question。我需要的模块,serialport,使这些包无效,“可读流”和“string_decoder”。 Serialport已下载此版本:

readable-stream@1.0.27-1

Serialports依赖是

"readable-stream": "~1.0.2"

可读流可用版本是:

....
'1.0.26',
'1.0.27-1',
'1.0.31',
....

这解释了为什么选择1.0.27-1。由于波浪号和~1.0.2,意味着这三个数字必须存在于每个版本中。参考Jakob Mattsson´s simple article

可读流下载

string_decoder@0.10.25-1

可读流再次取决于

"string_decoder": "~0.10.x"

string_decoders的可用版本是

....
'0.10.24',
'0.10.25-1',
'0.10.25',
'0.10.31',
'0.11.10-1'
....

为什么要下载该版本? Ref the article again,代字号表示版本号必须为0.10,而x是否存在?

为什么不选择string_decoder@0.10.31?

我相信question中的问题与预先发布此额外短划线有关。我试图收集事实似乎依赖关系可以更新。

1 个答案:

答案 0 :(得分:0)

我收到了关于github的回复,issue answer,我想我会与其他可能想知道的人分享:

semver范围检查是在语义上完成的,而不是词法上的,所以1.0.31应该与npm @ 2匹配:

%semver -r' ~1.0.2' 1.0.26 1.0.27-1 1.0.31 1.0.26 1.0.31我怀疑你所看到的行为是由于包tar包中包含的bundledDependency造成的。

请参阅Node app fails to run because of prerelease以获取更详细的答案。为什么会发生这种情况。