本文概述
- 1.创建包的基本结构
- 2.创建composer.json文件
- 3.托管你的包裹
- 4.在Packagist中注册软件包
- 5.要求你的包装并进行测试
- 6.使用Webhooks在每次推送时设置自动更新程序包
Composer是PHP中用于依赖性管理的工具, 它允许你声明项目所依赖的库, 并且它将为你管理(安装或更新)它们。许多项目和框架都使用composer来处理依赖关系管理。但是, 这些软件包需要在某个地方注册, 而这正是packagist所做的。 Packagist是默认的Composer软件包存储库。它使你可以找到软件包, 并让Composer知道从何处获取代码。你可以使用社区开发的软件包, 也可以使用自己的软件包进行贡献。
在本文中, 你将学习如何在Github中创建要在作Composer中使用的PHP Packagist软件包, 以及如何在Packagist.org中进行注册。
1.创建包的基本结构
要以最小的表达式创建一个包, 我们将需要创建基本结构(2个文件夹和3个文件)。
- 首先创建一个带有你的包名称的文件夹, 在这种情况下, 容器文件夹将是hello-composer。
- 在hello-composer内部创建一个名为src的新文件夹, 该文件夹将包含你软件包的源代码。
- 创建包的第一个类(在hello-composer / src内部), 在这种情况下, 我们的类将是Hello, 文件名为Hello.php, 它将包含以下代码:
<?php
/*
* (c) YOUR NAME <your@email.com>
*
* This source file is subject to the MIT license that is bundled
* with this source code in the file LICENSE.
*/
// If you don't to add a custom vendor folder, then use the simple class
// namespace HelloComposer;
namespace ourcodeworld\HelloComposer;
class Hello
{
public function say($toSay = "Nothing given")
{
return $toSay;
}
}
可以根据需要更改名称空间, 在这种情况下, 我们会添加ourcodeworld前缀, 因为你可以创建很多程序包, 但是使用前缀后, 它们将始终与你相关(此外, 它将在文件夹中的单个文件夹中创建)。供应商目录)。
2.创建composer.json文件
composer.json文件应位于软件包(hello-composer / composer.json)存储库的顶部, 这是你向packagist和composer都描述软件包的方式。
首先, 你必须选择一个程序包名称。这是非常重要的一步, 因为它不能更改, 并且应该足够独特以避免将来发生冲突, 此名称必须位于composer.json文件的” name”属性中。
有两种创建包的composer.json文件的方法:
A.Composer助手
使用动态助手创建composer.json, 该助手会要求控制台中的每个属性, 然后通过控制台将其导航到软件包的文件夹:
cd c:/folder-where/your-package-is-located/hello-composer
然后执行:
composer init
遵循交互式提示, 并为每个字段提供一个值。如果在生成的composer.json中需要更多字段, 请参阅文档以获取更多属性, 或使用以下composer.json。
B.手动
你可以按照下一个示例手动创建自己的composer.json(根据你的值更改值):
{
"name": "ourcodeworld/hello-composer", "description": "My first packagist package", "type": "package", "require": {
"php": ">=5.3.0"
}, "license": "mit", "authors": [
{
"name": "Your Name", "email": "your@email.com", "homepage": "http://yourhomepage-if-you-have.com"
}
], "minimum-stability": "dev", "autoload": {
"psr-4": {
"ourcodeworld\\HelloComposer\\": "src/"
}
}
}
composer.json中最重要的一点是” psr-4″内的”自动加载”, 你将指定应自动加载程序包src /文件夹中具有命名空间ourcodeworld \ HelloComposer的所有文件。命名空间前缀必须以\\结尾, 以避免相似前缀之间的冲突。例如, Foo将匹配FooBar命名空间中的类, 因此尾随反斜杠可以解决问题:Foo \\和FooBar \\是不同的。
然后, 在发布并安装你的软件包后(尚未), 你可以使用以下方法实例化先前创建的类Hello:
<?php
require_once __DIR__ . '/../vendor/autoload.php';
use ourcodeworld\HelloComposer\Hello;
$instance = new Hello();
echo $instance->say("Hello World");
随意在composer.json和你的类中随意修改名称空间。创建完所有文件后, 项目的结构应如下所示(你可以访问Github中的测试存储库以查看那里的结构):
3.托管你的包裹
为了在Packagist中发布软件包, 你需要将软件包托管在版本控制为GIT, Subversion或Mercurial的存储库中。如本文所述, 我们将使用Github与Git托管测试包。
如果尚未创建Github存储库, 请使用你的软件包名称(在本例中为hello-composer)创建许可证, 并根据需要进行许可:
创建完成后, 将存储库克隆到桌面中, 然后将包中的内容保存在其中。我们假设你对Git有所了解, 并且知道如何提交存储库中的所有文件。将所有文件提交到存储库后, 提交后, 检查所有文件是否已成功上传:
现在, 存储库应该位于https://github.com/ourcodeworld/hello-composer中, 而git网址为https://github.com/ourcodeworld/hello-composer.git。
4.在Packagist中注册软件包
导航到Packagist并创建一个新帐户(如果你没有)。拥有帐户后, 登录并转到”提交”, 然后继续创建你的软件包。
给出一个存储库URL, 在本例中为我们的存储库https://github.com/ourcodeworld/hello-composer, 然后单击”检查”, Packagist将检查软件包名称是否可用, 如果可用, 则单击”提交”。
软件包名称将从你存储库中的composer.json文件中检索:
一旦你的软件包被接受, 你应该看到你的软件包最终发布:
请注意, 如果你按照步骤6进行操作, 则将删除警告”此软件包未自动更新”。
5.要求你的包装并进行测试
你的软件包已发布, 你可以要求作Composer!要求使用composer打包的命令是composer require <vendor-name> / <package-name>, 在这种情况下为:
composer require ourcodeworld/hello-composer
请注意, 如果package.json中的” minimum-stability”属性设置为” dev”, 则你需要该软件包的项目必须具有相同的” minimum-stability”属性, 否则你将得到以下异常在控制台中:
出于最低稳定性(稳定)的原因, 找不到任何版本的软件包<供应商名称> / <软件包名称>。检查包裹的拼写或最低稳定性
如果执行前面的命令将包添加到项目中, 则应显示以下输出:
在此示例中, 为了测试我们创建的包是否正常工作, 我们将执行以下php脚本(因为这是测试, 因此我们加载了composer的autoload.php, 如果你使用的是symfony之类的框架, 则可能不需要不需要这样做):
<?php
// some-test-folder/index.php
require_once __DIR__ . '/vendor/autoload.php';
use ourcodeworld\HelloComposer\Hello;
$instance = new Hello();
echo $instance->say("Hello World");
使用命令:
php index.php
最终输出应为:
恭喜, 你已经成功创建并发布了你的第一个包装专家包!
6.使用Webhooks在每次推送时设置自动更新程序包
通常, 要更新packagist软件包, 你需要提交更改, 然后访问Packagist.org内部的软件包, 然后单击Update:
但这会变得非常烦人, 混乱和混乱, 这正是我们要与作Composer避免的事情。为了使事情变得简单, 你可以使用Github中存储库的Webhooks。 WebHook的概念很容易理解, WebHook只是HTTP回调, 发生某事时发生的HTTP POST, 并通过HTTP POST发送简单的事件通知, 在这种情况下, 此POST请求将由Github自动执行每次你对存储库进行一些更改时。
要启用此功能:
- 导航到Github中的存储库, 然后单击”设置”。
- 在本文档中, 从左侧菜单中选择”集成和服务”选项。
- 单击添加服务并搜索Packagist, 然后单击它。
现在, 你可能会被重定向到以确认密码, 然后将出现以下窗口:
在此窗口中, 以你的Packagist.org用户名和Packagist令牌(此令牌是唯一的, 你可以在Packagist的个人资料中找到它)的形式提供, 选中”活动”框, 然后单击”添加服务”。现在, 你每次提交并推送更改时, Packagist中的软件包都将自动更新。
编码愉快!
评论前必须登录!
注册