什么是Packagist?

Packagist是默认的Composer包仓库。它可以让您找到包,并让Composer知道从哪里获取代码。您可以使用Composer来管理项目或库的依赖关系 - 在Composer网站上阅读更多相关信息.

你可以在GitHub上找到packagist.org源代码.

社区

如果您对composer有疑问或想帮忙, 请加入我们 irc.libera.chat上的#composer频道。您可以在Composer文档中找到更多社区资源。

贡献/捐赠

要报告问题或贡献代码, 您可以在 GitHub上找到源代码库。

如果你想在财务上支持项目的托管和维护, 最好的办法是签出并使用私有 Packagist.它可以帮助您快速可靠地安装软件包,为您提供私有软件包仓库,并且资金用于Composer和Packagist维护!

如何提交软件包?

命名你的软件包

首先,您必须选择一个包名称。这是一个非常重要的步骤,因为它不能改变,它应该足够独特,以避免将来发生冲突。.

包名称由供应商名称和由/联接的项目名称组成. 供应商名称的存在是为了防止命名冲突. 例如, 通过包括一个供应商名称, igorwseldaek 都可以有一个名为 json 的库 ,通过命名他们的包为igorw/jsonseldaek/json即可

在某些情况下,供应商名称和包名称可能相同。这方面的一个例子是`monolog / monolog`。对于具有唯一名称的项目,建议使用此方法。它还允许稍后在同一供应商下添加更多相关项目。如果您要维护一个库,这将使您可以很容易地将其拆分为较小的解耦部分。

下面是一个典型的包名称的列表, 以供参考:

// monolog 是一个库, 因此供应商名称和包名称是相同的.
                monolog/monolog
                
                // 这可能是一个drupal模块的名称 (由monolog维护和提供,
                // 如果drupal团队做了, 供应商将是drupal).
                monolog/monolog-drupal-module
                
                //acme在这里是一家公司或个人, 他们可以用一个通用的名字 (Email) 命名他们的包.
                // 只要它在他们自己的供应商命名空间, 它不与其他人冲突.
                acme/email

包含该名称的包已发布后,packagist上的供应商名称将受到保护。这意味着您无法在未经许可的情况下发布包含已存在于packagist中的供应商名称的包。. 为了能够发布已有供应商名称的包,您需要成为该供应商中至少一个包的维护者。允许包和供应商名称包含小写字母 (a-z)、数字 (0-9) 以及字符“.”、“-”和“_”。每个必须以字母或数字开头

创建composer.json文件

composer.json文件应该位于包的git / svn / ..仓库的顶部,这是您向packagist和composer描述包的方式。

典型的composer.json文件如下所示:

{
    "name": "monolog/monolog",
    "type": "library",
    "description": "Logging for PHP 8.0",
    "keywords": ["log","logging"],
    "homepage": "https://github.com/Seldaek/monolog",
    "license": "MIT",
    "authors": [
        {
            "name": "Jordi Boggiano",
            "email": "j.boggiano@seld.be",
            "homepage": "http://seld.be",
            "role": "Developer"
        }
    ],
    "require": {
        "php": ">=8.0.0"
    },
    "autoload": {
        "psr-0": {
            "Monolog": "src"
        }
    }
}

这些信息大多是显而易见的, keywords是标记, require是您的包所具有的依赖项列表。这当然可以是包, 而不仅仅是 php 版本。.你可以使用ext-foo来要求php扩展(例如ext-curl). 请注意, 大多数扩展不会公开版本信息, 因此, 除非您确定它确实公开, 否则更安全的做法是使用"ext-curl": "*" 来允许它的任何版本。 最后,type字段在这种情况下表明这是一个库。如果你为框架等做插件,并且如果它们集成了composer,那么它们的插件可能有一个自定义包类型,你可以使用它们自己的安装程序来安装包。如果没有自定义类型,您可以省略它或使用“库library”。

在仓库库根目录中提交此文件后,可以通过输入公共仓库URL 将包提交到Packagist

管理包版本

您的软件包的新版本将自动从您在VCS仓库中创建的标记中获取.

管理版本控制的最简单方法是省略composer.json文件中的version字段。然后版本号将从tag标记和分支名称中解析.

tag/版本名称应与 'X.Y.Z', 或 'vX.Y.Z' 匹配, 并带有RC,beta,alpha或补丁版本的可选后缀。下面是一些有效tag名称的示例:

1.0.0
v1.0.0
1.10.5-RC1
v4.4.4beta2
v2.0.0-alpha
v2.0.4-p1

分支将自动显示为“dev”版本,任何想要尝试使用您最新和最好的库的人都可以轻松安装,但这并不意味着您不应该标记版本。强烈鼓励使用语义版本控制

更新时间

如果启用了JS,则会在提交后立即对新包进行抓取。

没有自动更新的现有包(GitHub/BitBucket/GitLab钩子)将 每周抓取一次以进行更新。当启用钩子时, 每次push都会对包进行爬网, 或者在爬网失败的情况下, 每月至少对包进行一次爬网. 如果您是以维护者身份登录的, 也可以在包页面上触发手动更新.

强烈建议为您的所有软件包设置GitHub/BitBucket/GitLab服务钩子。这减少了我们这边的负载, 并确保您的包几乎立即更新。检查下面的操作方法。

搜索索引每五分钟更新一次。 它将索引(或重新索引)自上次搜索索引器运行以来已爬网的任何包.

如何更新包?

GitHub 钩子

启用Packagist服务钩子可确保在您推送到GitHub时,您的包将始终立即更新。

为此, 您可以:

  • 请确保您通过GitHub登录 (如果您已经有一个帐户未连接到GitHub, 您可以在您的个人资料上连接它)。如果您已经登录, 请先注销, 然后再次通过GitHub登录, 以确保授予我们所需的权限。
  • 确保Packagist应用程序有权访问您需要从中发布包的所有GitHub组织。
  • 检查您的包列表, 以查看是否有未自动同步的警告。
  • 如果您仍需要在某些包上设置同步, 请尝试触发手动帐户同步, 让Packagist再次尝试在您的帐户上设置挂钩。请注意,归档的库无法设置,因为它们在GitHub的API中只读。

不想通过GitHub登录并授予我们 web 钩子配置访问权限?

您可以使用以下值手动配置GitHub webhook:

  • Payload URL: https://packagist.org/api/github?username=PACKAGIST_USERNAME
  • Content Type: application/json
  • Secret: 你的 Packagist API Token
  • 只是push事件就足够了。

Bitbucket Webhooks

要启用Bitbucket Web钩子,请转到您的BitBucket存储库,打开设置并在菜单中选择“Webhooks”。添加一个新钩子。您必须输入包含用户名和API令牌的Packagist端点。输入https://packagist.org/api/bitbucket?username=USERNAME&apiToken=API_TOKEN为URL。保存您的更改,您就完成了。

GitLab 服务

要启用GitLab服务集成, 请转到您的GitLab存储库,从菜单中打开“设置”>“集成”页面。在项目服务列表中搜索Packagist。选中“Active”框,输入您的packagist.org用户名和API令牌。保存您的更改,您就完成了。

手动钩子设置

如果您不使用Bitbucket或GitHub,则可以使用git post-receive hook或类似钩子手动调用通用端点. 您必须执行 POST 请求到https://packagist.org/api/update-package?username=USERNAME&apiToken=API_TOKEN请求正文如下所示:{"repository":{"url":"PACKAGIST_PACKAGE_URL"}}

您可以使用curl执行此操作,例如:

curl -XPOST -H'content-type:application/json' 'https://packagist.org/api/update-package?username=USERNAME&apiToken=API_TOKEN' -d'{"repository":{"url":"PACKAGIST_PACKAGE_URL"}}'

API 令牌

您可以在个人资料页面上找到您的API令牌。