59370a492763830985be7f2e9a4ae094
包管理工具与 Git

包管理工具的背景和术语

基本上每个语言都有自己的包管理工具,绝大多数项目也不可避免的使用自研或三方组件。不管是 npm 还是 Cocoapods,作为包管理工具,它们基本上都由三部分组成:

  1. 配置文件:比如 npm 中的 package.json 或者 pods 中的 Podfile,用来指定使用哪些组件
  2. 配置锁:比如 npm 中的 package-lock.json 或者 pods 中的 Podfile.lock,用来固定版本号。防止出现没有修改配置文件,但因为配置文件中存在动态依赖,导致不同时间内安装结果不一致的问题。如果配置文件不变且锁存在,下次安装时以锁为准。(PS:npm 的配置锁机制经历了三次调整,到 5.4.2 版本以后,看起来和 pods 的语义是一致的。详见这篇文章)。
  3. 组件实体:也就是各个组件的源码,一般单独存在于一个目录里

两种使用方式

关于包管理工具在 Git 中的管理,江湖上一般有两种做法:

  1. 一些同学选择把配置文件和配置锁提交到 Git 上,组件实体不提交。每次由使用方安装依赖,由于配置锁的存在,可以保证所有人安装结果是一致的。
  2. 另一些同学选择把组件实体也提交到 Git 上,这样使用者无需安装依赖。

第一种做法的缺点是随着依赖越来越复杂,安装速度(尤其是依赖关系的分析)会大幅度降低,在持续集成方面也会遇到速度问题。此外,必须保证所有人在改动配置文件后,同时把锁文件提交,否则就会出现同配置文件但不同组件实体的情况。

top Created with Sketch.