项目中package.json里面一个包依赖是这样
"react-scroll-bar": "^0.0.3-drink.2"
但是每次yarn安装的时候实际安装的是0.0.3-polor.6
这个版本,我理解^
是安装大范围最新的包,但是按理说我指定了具体tag名(drink
),为什么这里会安装到polor
这个tag去(难道^
的检查跟tag无关???),此外,我检查了lock文件没有问题,把lock全部删除了重新装也没用,所以应该跟yarn.lock无关,求大神解答下??
^
匹配同主版本的最新。
你这里表示只匹配最新一个 0.x.x-x
的版本,跟 x.x-x
没有关系。
这是因为设计 npm 的那帮人最开始假设只有大版本才有 Breaking Changes,新增点儿 Feature 或是 BugFix 不影响同一个主版本的低版本。
但事实证明他们错了,并不是所有开发者都遵守了这个规矩,导致“坑深蒂固”。
package-lock.json
就是负责填这个坑的。
tag 其实就是版本的别名,常见于同时存在多个版本分支的包中。你这里的并不是 tag。vue@latest
、vue@next
、vue@alpha
里的 latest
、next
、alpha
这些才是 tag。一个包发布时,不指定 tag 的话默认就是 latest
。
你要想强制指定特定版本,那就把 ^
去掉。
另,~
匹配同次版本的最新一个;*
匹配所有版本最新一个。
P.S. yarn.lock
理论上应该会记录下你这个项目初始化时装的那个版本啊,其他人克隆你项目后只要不删它,应该没事儿才对。反正我没复现出来你说的这个问题。