项目中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无关,求大神解答下??
项目中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无关,求大神解答下??
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答5.1k 阅读✓ 已解决
3 回答1.9k 阅读✓ 已解决
^
匹配同主版本的最新。你这里表示只匹配最新一个
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
理论上应该会记录下你这个项目初始化时装的那个版本啊,其他人克隆你项目后只要不删它,应该没事儿才对。反正我没复现出来你说的这个问题。