如何在 GitHub 存储库中包含 Composer
Posted
技术标签:
【中文标题】如何在 GitHub 存储库中包含 Composer【英文标题】:How to include Composer within a GitHub repository 【发布时间】:2021-09-19 02:08:17 【问题描述】:我是 Composer 和 Git/GitHub 的新手,所以如果这是一个愚蠢的问题,请原谅!
我在 GitHub 上的存储库中构建了一个 WordPress 插件,我将使用该存储库通过此插件更新检查器库向插件分发更新:https://github.com/YahnisElsts/plugin-update-checker
该插件有许多我已经安装的 Composer 依赖项。我一直在研究,显然您不应该在您的 GitHub 存储库中包含作曲家供应商目录(请参见此处:https://getcomposer.org/doc/faqs/should-i-commit-the-dependencies-in-my-vendor-directory.md)但是我的困惑是,如果供应商目录,我如何使用更新检查器从 GitHub 分发插件不包括在内?
实现这一目标的正确方法是什么?我错过了什么明显的东西吗?
提前非常感谢,海登
【问题讨论】:
一般来说,大多数人会告诉你不要跟踪vendor
。相反,大多数人会建议创建一个构建任务来执行 composer install
并进行一些额外的优化,并将 zip 附加到 GitHub 中的专用版本,并且该插件似乎也支持这一点。但是,这可能比您希望的要复杂一些。在 GitHub 中针对此特定场景跟踪 vendor
并不是世界末日,如果您的安装基础很小和/或受控,这可能不是一个坏主意。
@ChrisHaas 感谢您提供的知识。您是否碰巧有任何关于构建任务的资源或示例可以发送给我?如果可能的话,我想了解更多。你也知道为什么人们会说不要跟踪供应商吗?我很难理解为什么这是一个问题。再次感谢!
@HaydenIngham 您的存储库中似乎已经有composer.json
。它还有require
部分。我认为一旦用户运行composer install
,就会创建vendor
目录。您是否对更具体的事情感到困惑,或者这是否是正确的方法?
@HaydenIngham,不幸的是我现在没有。我所有的公共插件目前都托管在官方 WordPress 存储库中并使用 SVN,我所有的其他插件都是为个人客户手动维护的。但是您要研究的是“GitHub 操作”,它需要一些设置,但一旦您获得它,它们就会非常容易。
@vish 用户将无法运行“composer install”。他们是没有这些知识的最终用户。我的插件将通过 WordPress 网站上的 zip 文件安装。另外,我不确定您是否感到困惑,上面的 GitHub 链接不是我的存储库。这是一个 WordPress 插件更新检查器,我将包含在我的插件中。我的存储库确实包含一个“composer.json”文件,但是如果未包含 vendor 文件夹,则不会安装依赖项,因为插件的用户将无法执行“composer install”。我希望这是有道理的。
【参考方案1】:
对于“composer-friendly”项目,在运行composer install
时,不提交供应商文件夹的规则是有意义的,由构建或发布步骤保证和/或在开发过程中手动运行。
我没有详细看你正在使用的plugin-update-checker库,但有2种情况:
-
它只知道从分支获取代码 - 如果是这种情况,那么您将不得不提交供应商文件夹,没有其他选择。
另一方面,如果它可以处理从 GitHub 上发布的版本中获取代码,那么您可以跳过提交供应商文件夹并仅将其包含在您的发布版本中。一个非常流行的 WordPress 插件可以做到这一点,看看他们是如何做到的:https://github.com/Yoast/wordpress-seo。您会看到供应商未提交,但如果您下载了一个版本,它就在存档中。
【讨论】:
谢谢 Zoli,这真的很有趣。我来看看 Yoast。据我查看该存储库上的自述文件,插件检查器通过发布工作。所以也许这意味着我可以像 Yoast 一样接近它。 嗨 Zoli,看到发布是从 GitHub 中的一个分支创建的,你知道如果分支中没有供应商文件夹,我将如何创建一个包含供应商文件夹的版本吗?我一直在研究 Yoast,该设置似乎是正确的做法,但我无法理解这些版本是如何创建的,包括供应商文件夹。 据我所知,您只需在本地准备 zip 并在创建版本时将其添加为二进制文件。【参考方案2】:将供应商文件夹添加到您的 .gitignore。有人可以使用 (composer install) 和 (composer dump-autoload) 将您的依赖项安装到项目中。
【讨论】:
嗨 Hirad,谢谢,但安装我的插件的人将是最终用户。他们不会知道如何使用 composer install。当然有一种方法可以将作曲家包含在生产项目中,否则它的意义何在!以上是关于如何在 GitHub 存储库中包含 Composer的主要内容,如果未能解决你的问题,请参考以下文章