npm与yarn
版本号:
<主版本号>.<次版本号>.<修订版本号>
主版本号(1):当功能模块有较大的变动,比如增加多个模块或者整体架构发生变化。此版本号由项目决定是否修改。
子版本号(1):当功能有一定的增加或变化,比如增加了对权限控制、增加自定义视图等功能。此版本号由项目决定是否修改。
阶段版本号(1):一般是 Bug 修复或是一些小的变动,要经常发布修订版,时间间隔不限,修复一个严重的bug即可发布一个修订版。此版本号由项目经理决定是否修改。
npm的版本号管理策略:
npm的版本管理策略叫 语义化版本规范,顾名思义 就是通过语句来做版本的控制:
^ 锁定主版本号
~ 锁定次版本号
* 安装最新版本号
上面的表述 也不是很准确,更准确的定义是 ^匹配的是最左侧的非0位,如果第一位是0的话,则^与~的效果是一样的。如果第一位和第二位都是0的话,则 ^只会更新第三位的版本号。
所以npm的版本策略会有什么问题呢?
npm包之间的互相依赖,导致会出现严重的版本问题,即 如果我依赖A包,而A包又依赖B包,但是A包 并没有对B包做范围限制,最终我在更新的时候,最新的B包 导致A包出现了问题,最终导致整个项目出现了问题。
yarn是如何解决的?
yarn创建了一个yarn.lock文件,里面详细描述了每一个包所依赖的包的版本在起始安装时候的版本情况,每次更新package.json的时候 都会以yarn.lock作为参考。即yarn.lock将每一次npm intall和npm update的包的情况做了一次快照,在下一次 进行npm uodate的时候 都会以此快照未基础。