应该将 vendor 目录加入版本控制吗?

1. introductions

在进行项目开发的时候,我们会使用很多第三方库,如jQuery,bootstrap等。因为这些库的存在,满足了我们很多开发过程中的需求,同时也减少了我们的工作量。另一方面,一个项目中可能会使用到很多的第三方库,如果每个库都保存一份,随着项目的版本迭代,库的版本也会不断更新,这时就会涉及到一个很重要的问题:vendor目录是否应该加入版本控制。

2. vendor目录介绍

vendor目录是 Composer 组件的安装目录。在安装任何一款以 Composer 管理的 PHP 类库之前,我们需要预先声明当前项目的依赖关系,然后使用 Composer 安装,Composer 将会把所有依赖的类库安装到 vendor 目录下,而当前目录下的 composer.lock 文件会记录每个类库的版本信息。

2.1 vendor目录的重要性

vendor目录是整个项目中非常重要的一部分。我们可以理解它为项目的灵魂,因为它包含了所有的第三方依赖库和对应的版本号。由于开发者们都使用的是自己的计算机或云服务器进行开发,因此每个计算机和环境可能都不同,如果没有vendor目录,即使是相同的依赖管理在不同的开发机器上,也无法保障依赖库的版本一致性与稳定性,这就将无法保证项目的稳健性。

2.2 vendor目录的管理

对于vendor目录的管理,我们需要考虑到两个问题:是否加入版本控制以及如何快速安装依赖。

3. vendor目录是否应该加入版本控制

一些开发人员可能对是否将vendor目录加入版本控制存有疑问,因为他们认为这会增加目录的体积,并带来不必要的负担,并且在版本交付时将导致仓库变得过于庞大,启动和操作速度将会随着仓库大小的增长而变慢,这样会影响团队的协作效率。

3.1 将vendor目录加入版本控制的优点

将vendor目录加入版本控制会带来许多好处:

1.重现产品环境
通过记录每个库的版本,我们可以很方程的在各个开发环境中部署相同版本的系统,从而更好的跟踪和调试问题,特别是测试阶段

2.便于团队协作
如果不在版本控制中存储这些库,每个开发者就需要自己下载这些库才能开始工作。这就意味着每个人都需要了解每个库的用法,并且每个人都必须下载相同版本的库,这可能会出现一些意外情况。如果这些库被托管到版本控制中,那么任何其他开发者都可以像您一样git clone您的代码存储库,并且他们将不会错过任何东西。

3.2 将vendor目录加入版本控制的缺点

将vendor目录加入版本控制有几个缺点:

1.磁盘空间过大
vendor 中包含的开发人员每次安装的所有依赖项,而且它们的数量很多,所以可能需要大量的捆绑,特别是对于更大的项目,它们在持续集成的过程中可能需要大量的磁盘空间。

2.更新频繁
如果您的代码库与库关系紧密,那么您可能会注意到vendor目录中的很多类库版本有时会不断更改导致频繁更新,这样的变更会导致大量代码库上的合并冲突和pull request,从而导致时间和精力浪费。

4. 如何管理vendor目录

4.1 加入git ignore

当我们开始处理vendor目录时,我们需要确保在进行git提交时,vendor目录被正确的过滤,因为您不想将该目录的文件上传到您的托管服务提供商提供的Git仓库中。您可以通过在项目的 .gitignore 文件中添加 vendor/ 来确保让git忽略vendor目录。在 .gitignore 文件中,添加有关vendor目录的以下行:

vendor/*

!.gitignore

第一行表示忽略所有vendor目录文件,第二个表示排除.gitignore文件自己。

4.2 使用Composer.lock文件

正确使用 composer.lock 文件可以使我们更好的处理 vendor目录:

1.锁定依赖项的版本 让composer锁定将要安装的库的版本,以便在其他开发者部署项目时,他们将使用相同的依赖版本。这对于避免不良操作和版本问题的出现非常有帮助。

2.快速生成vendor目录 它会使 Composer 能够快速构建您的 vendor 目录,并确保每个依赖库都是与上次安装时使用相同的版本安装。

3.跨多个环境实现特定版本的产品部署 composer.lock 文件可以告诉您,每个依赖项的确切版本都是什么,并且并未受任何传递依赖项的错误所影响。

总体来说, 我们需要学习如何让 Composer 锁定外部依赖关系的版本,并使用 composer.lock 文件来记录固定库版本的更改,以及在版本控制系统中存储它。

5. 总结

在使用 composer 管理软件包时, vendor目录是非常重要的一部分,它包含了整个项目所依赖的第三方库,而且这些库的版本和数量通常是非常大的。因此,我们需要好好管理这个目录,充分把握好它带来的启发,同时克服遇到的挑战。对于是否把 vendor 目录加入版本控制中的问题,我们应该根据实际情况进行权衡,权衡利弊后选择适合自己项目的方案。