我试图找出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中的问题与预先发布此额外短划线有关。我试图收集事实似乎依赖关系可以更新。
答案 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以获取更详细的答案。为什么会发生这种情况。