首页 > 技术文章 > 升级依赖的注意事项

jay54520 2018-01-20 21:53 原文

不同软件的版本号含义可能不同

MongoDB 版本号

对于 MongoDB 2.4.1,2.4 表示发行版本号而 .1 表示修订版本号。发行版本号的第二个元素(比如 2.4.1 中的 4 )描述的是发行版本的类型。以偶数结尾(比如上面的 4)的发行版本号是稳定并且准备用于生产环境的,而奇数的仅用于开发和测试。

通常,发行版本号的变化(比如 2.2 到 2.4)表明引入了新功能并且可能会破坏向后兼容性。修订版本号的变化表示了修复 bug 的发布并且使向后兼容的。 -- 来自 https://docs.mongodb.com/manual/release-notes/#mongodb-version-numbers

MongoDB 驱动版本号

MongoDB 驱动使用语义化版本 -- 来自 https://docs.mongodb.com/manual/applications/drivers/#drivers-version-numbers

语义化版本

版本格式:主版本号.次版本号.修订号,版本号递增规则如下:

  1. 主版本号:当你做了不兼容的 API 修改,
  2. 次版本号:当你做了向下兼容的功能性新增,
  3. 修订号:当你做了向下兼容的问题修正。

可以看出,这个与上面的 MongoDB 版本号是不同的。

依赖的依赖

一个依赖也会有它自己的依赖。

比如 Python 的 Motor 依赖于 PyMongo

-- 来自 https://motor.readthedocs.io/en/stable/requirements.html#motor-and-mongodb

如果你是 Motor==0.4,那么你的 PyMongo 版本必须为 2.8.0。如果你不知道这点,安装了 PyMongo 3.0+ 从而覆盖了 PyMongo==2.8.0,就会出问题。

应对不兼容的升级

如果升级的版本含有不向下兼容的改动,那么就要注意是否会对代码造成影响。

  • 如果单元测试全部覆盖到了,那么升级版本后使单元测试再次通过就行
  • 如果单元测试覆盖率不高或者没有单元测试,那么就需要把所有用到该依赖的地方查找出来,然后人肉对比是否有不兼容的地方或者手工测试

总结

  • 由于不同依赖的版本号含义可能不同,所以升级依赖前需要弄清楚版本号的意思
  • 如果项目有版本号,那么需要说明版本号的意思,比如“本项目版本号使用语义化版本
  • 注意依赖的依赖
  • 单元测试对依赖的升级很有帮助

推荐阅读