什么是Packagist?
Packagist是默认的Composer包仓库。它可以让您找到包,并让Composer知道从哪里获取代码。您可以使用Composer来管理项目或库的依赖关系 - 在Composer网站上阅读更多相关信息.
你可以在GitHub上找到packagist.org源代码.
社区
如果您对composer有疑问或想帮忙, 请加入我们 irc.libera.chat上的#composer频道。您可以在Composer文档中找到更多社区资源。贡献/捐赠
要报告问题或贡献代码, 您可以在 GitHub上找到源代码库。
如果你想在财务上支持项目的托管和维护, 最好的办法是签出并使用私有 Packagist.它可以帮助您快速可靠地安装软件包,为您提供私有软件包仓库,并且资金用于Composer和Packagist维护!
如何提交软件包?
命名你的软件包
首先,您必须选择一个包名称。这是一个非常重要的步骤,因为它不能改变,它应该足够独特,以避免将来发生冲突。.
包名称由供应商名称和由/
联接的项目名称组成. 供应商名称的存在是为了防止命名冲突.
例如, 通过包括一个供应商名称, igorw
和 seldaek
都可以有一个名为 json
的库 ,通过命名他们的包为igorw/json
和seldaek/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令牌。