^
匹配同主版本的最新。
你这里表示只匹配最新一个 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
理论上应该会记录下你这个项目初始化时装的那个版本啊,其他人克隆你项目后只要不删它,应该没事儿才对。反正我没复现出来你说的这个问题。
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…