【问题标题】:Should I check in libraries in the vendor folder that are pulled in by composer?我应该签入由作曲家拉入的供应商文件夹中的库吗?
【发布时间】:2015-06-03 18:19:29
【问题描述】:
我已经花了几个小时寻找我的问题的答案,但仍然没有找到合适的答案。
基本上,我已经接管了一个 PHP 项目,该项目使用 composer 来引入第三方库/依赖项。然而,很多依赖不再被管理,作者可能随时将它们完全从 github 中删除。
我目前正在考虑我应该检查整个供应商文件夹,因此即使不再通过 composer 提供这些库,我仍然可以随身携带它们。
或者,我可以分叉这些库 repo 并让作曲家从我的帐户中提取。这可以接受吗?
我真的希望就处理这个问题的最佳方法获得一些建议。
提前致谢!
【问题讨论】:
标签:
php
git
composer-php
dependency-management
【解决方案1】:
我是否应该签入整个供应商文件夹,这样即使库不再通过 composer 可用,我仍然可以随身携带它们?
我的建议是创建一个备份分支,其中包含您的应用程序及其所有供应商。只需执行 git checkout -b {VERSION}-backup,然后执行 composer install(这会将 composer.lock 和所有依赖项放入定义的供应商文件夹中),然后执行 git push origin {VERSION}-backup。
这允许依赖动态包管理,只要包可通过 Packagist 获得并且可从其源(Github 等)下载。
现在,如果某个依赖项被删除并变得不可用,请将其从 composer.json 中删除,并将最后一个 {VERSION}-backup 分支中的代码合并到 master 分支中。 = 您用备份中的静态依赖项替换了动态依赖项。
顺便说一句:有没有想过对您的代码进行安全审核?
这将不起作用,动态拉取依赖项。针对特定版本进行安全审计 - 针对一组静态依赖项。在这种情况下,推入一个包含所有依赖项的完整应用程序是常见的,也是最佳实践。但是我们有什么:后端的 Composer 安装新主题和 composer install --no-dev --optimize-autoload 在生产盒上“安装”软件。现代;)
我可以分叉这些库回购并让作曲家从我的帐户中提取。这可以接受吗?
是的!你也可以要求 Packagist 的人删除不再维护的包,或者将它们替换为新的个人分支。
【解决方案2】:
这实际上取决于您的项目是否需要针对可移植性进行优化。
虽然,违反最佳实践比抱歉更安全,但你必须花时间替换和重构不可用的依赖项......
【解决方案3】:
来自她的packagist - 理论上这是可能的,但不太可能。
从实践来看,包直接连接到 CVS 的主要问题。但如果它是实时项目,您可以找到另一个代码副本来恢复功能。