在版本控制中不包括Node模块的情况是否也适用于Composer包?
在研究Node的node_modules
是否应该被检入你的版本控制库时,最近的共识似乎是你应该把它包含在你部署的应用程序中。
资料来源:
- 检查node_modules与shrinkwrap
- 在Heroku上创buildnode.js应用程序时,是否应该检查node_modules?
- https://www.npmjs.org/doc/misc/npm-faq.html#Should-I-check-my-node_modules-folder-into-git
在阅读这些论点时,它让我质疑composer php/vendors
目录是否也应该被检入版本控制。 composer php的文档build议你不要:
我应该在供应商目录中提交依赖关系吗?
一般build议是否定的。 供应商目录应该被添加到.gitignore / svn:ignore / etc。
最好的做法是让所有的开发人员使用Composer来安装依赖关系。 同样,构build服务器,CI,部署工具等也应该适应作为其项目引导的一部分运行Composer。
虽然在某些环境下实施它可能会很诱人,但会导致一些问题:
- 大型VCS存储库大小和更新代码时的差异。
- 在您自己的VCS中复制所有依赖关系的历史logging。 […]
对比这个论点是这个( 来源 ):
不检查node_modules在源码树中创build了很多与我的应用程序无关的噪音?
不,你错了,这个代码被你的应用程序使用,它是你的应用程序的一部分,假装不会让你陷入麻烦。 你依赖于其他人的代码,他们就像你一样可能写出新的错误,可能更多。 检查源代码pipe理中的所有代码,使您可以审核应用程序中每一个变更的行。 它允许您在本地使用$ git bisect,并确保它与生产中的相同,并且生产中的每台机器都是相同的。 没有更多的追踪未知的依赖关系的变化,所有的变化,在每一行,都可以在源代码pipe理中查看。
总之,问题是这样的:为什么一个gitignore(即不是版本控制) node_modules
但是对Composer的vendor/
目录来说不是相同的?
把你所有的模块放在你的VCS下载或上传真的很沉重。 例如,我工作在两个node.js项目上,总的node_modules目录大小在250MB到500MB之间,而具有资产的整个代码通常小于40MB。 每个Node.js开发人员都喜欢Node轻量级,所以代码必须易于下载和共享。
对于第二点来说,避免回归的另一种方法是在你的package.json依赖版本中限制更多。 你会在这里find更多的信息。
最后,最好的参数是看看大家都知道的着名模块:
- 表示忽略node_modules
- 摩卡忽略了node_modules
- q忽略node_modules
- …
提交外部依赖的原因是
- 使用git pull来部署更容易
- 所使用的代码直接包含在提交任何人签出
对此的争论是
- Git没有部署工具
- 所有的依赖关系pipe理器都有办法确保使用的代码可以被获取
我对npm一无所知,但对于Composer来说,最后一点是通过提交composer.lock
来实现的。
我不认为“审计守则”的论点在任何情况下都是有效的。 如果你编写自己审计的软件,然后需要审计所有的库,那么可能所有的代码变更都需要保存。 一般情况并非如此。
git bisect
仍然可以和一个致命的composer.lock
。 它确实需要安装每一分步骤的依赖关系,但这只是一个简单的步骤,可能已经在自动testing套件运行中完成了。
最后要担心的是使用软件包离线时。 这对于Composer来说确实是一个问题,因为没有可下载版本的中央托pipe(npm可能会这样做)。 如果这是一个问题,请提交代码(并尝试了解如何在将来更新丢失的包),或者设置Satis实例来创build您使用的代码的本地副本。
我研究的越多,我就越觉得没有一个正确的答案,只是不同的观点以及每种方法的利弊。
这个博客从Bower的angular度来看,很好地衡量了每个人的利弊: http : //addyosmani.com/blog/checking-in-front-end-dependencies/ 。
简而言之:至less现在,衡量利弊,并决定什么最适合你的情况。