
如何创建一个自己的 Composer/Packagist 包
如何创建一个自己的 Composer/Packagist 包
首先让我们踏着欢快的脚步去Github创建一个新库,这里取名 composer-car,又欢快的将它克隆到本地:
git clone https://github.com/GeHou/composer-car.git
cd composer-car
这个composer-car文件夹就是你的包的root目录了,你只需要记住composer.json在包的哪个目录下面,一般那就是包的root目录了。什么?做包子的工作台?这么理解呢也是可以的,不过同学能先收收你的口水么。
现在我们还没有composer.json文件,你可以根据composer文档生成并编辑它,当然composer贴心的为我们准备了命令行,look:
?
-> composer init
Welcome to the Composer config generator
This command will guide you through creating your composer.json config.
Package name (<vendor>/<name>) [hou/composer-car]: 这里填写<包提供者>/<包名>的信息
Description []: 包的描述
Author [GeHou <***@gmail.com>]: 作者信息
Minimum Stability []: 最低稳定版本
License []: 授权协议
Define your dependencies.
Would you like to define your dependencies (require) interactively [yes]? no
Would you like to define your dev dependencies (require-dev) interactively [yes]? no
{
"name": "hou/composer-car",
"description": "In order to study composer",
"license": "MIT",
"authors": [
{
"name": "GeHou",
"email": "***@gmail.com"
}
],
"minimum-stability": "dev",
"require": {
}
}
Do you confirm generation [yes]? yes
Would you like the vendor directory added to your .gitignore [yes]? yes
虽然经过以上的一番挣扎生成了composer.json文件,不过我们还得往里面加点东西。使用你熟悉的编辑器打开composer.json文件修改至如下:
?
{
"name": "hou/composer-car",
"description": "In order to study composer",
"license": "MIT",
"authors": [
{
"name": "GeHou",
"email": "***@gmail.com"
}
],
"minimum-stability": "dev",
"require": {
"php": ">=5.3.0"
},
"autoload": {
"psr-4": {
"Ford\\Escape\\": "src/Ford/Escape",
"Ford\\Fusion\\": "src/Ford/Fusion",
"Ford\\Focus\\": "src/Ford/Focus",
"Ford\\Fiesta\\": "src/Ford/Fiesta"
}
}
}
细心的小伙伴可能已经认出了福特的商标(Ford),这说明我们都是同道中人,你一定也很喜欢汽车,对吧对吧? :-)
我们登陆一下福特的网站看看都有哪些热销车型,嗯嗯分别有ESCAPE、FUSION、FOCUS、FIESTA,中文名称分别是翼虎、蒙迪欧、福克斯、嘉年华,嘉年华ST我的梦想啊~~~ 好了好了,那位看官放下你手里的板砖,我承认一说到汽车就会滔滔不绝,下面我们把水分挤出去继续讲解。
根据上面的命名空间和目录的映射关系,包的结构现在应该是下面这个样子:
?
composer-car
- src
- - Ford
- - - Escape
- - - - Escape2013.php
- - - Fiesta
- - - - Fiesta2013.php
- - - Focus
- - - - Focus2013.php
- - - Fusion
- - - - Fusion2013.php
- .gitignore
- composer.json
- README.md
Escape2013.php:
<?php
namespace Ford\Escape;
class Escape2013
{
public static function info()
{
echo "This is Ford Escape2013!<br />";
}
}
Fiesta2013.php:
<?php
namespace Ford\Fiesta;
class Fiesta2013
{
public static function info()
{
echo "This is Ford Fiesta2013!<br />";
}
}
Focus2013.php:
?
<?php
namespace Ford\Focus;
class Focus2013
{
public static function info()
{
echo "This is Ford Focus2013!<br />";
}
}
Fusion2013.php:
<?php
namespace Ford\Fusion;
class Fusion2013
{
public static function info()
{
echo "This is Ford Fusion2013!<br />";
}
}
以上都梳理完毕后,需要安装composer来测试我们的包是否可以正常工作,安装它很简单在包的root目录下install即可:
?
1
composer install
闪过几行神秘的提示之后即安装完毕,此时会在vendor/composer/autoload_psr4.php中生成命名空间和目录的映射关系,被包在一个数组中:
<?php
// autoload_psr4.php @generated by Composer
$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);
return array(
'Ford\\Fusion\\' => array($baseDir . '/src/Ford/Fusion'),
'Ford\\Focus\\' => array($baseDir . '/src/Ford/Focus'),
'Ford\\Fiesta\\' => array($baseDir . '/src/Ford/Fiesta'),
'Ford\\Escape\\' => array($baseDir . '/src/Ford/Escape'),
);
如果发布成packagist包然后进行安装的话,到时候这里就不是$baseDir了而是$vendorDir。
然后我们新建一个测试文件show.php,用以下内容填充它:
<?php
require 'vendor/autoload.php';
use Ford\Escape as Escape;
use Ford\Fiesta as Fiesta;
use Ford\Focus as Focus;
use Ford\Fusion as Fusion;
echo Escape\Escape2013::info();
echo Fiesta\Fiesta2013::info();
echo Focus\Focus2013::info();
echo Fusion\Fusion2013::info();
打开浏览器敲入 http://foo.com/composer-car/show.php (foo.com是我的本地测试域名,请替换成小伙伴自己的)。
浏览器上依次输出了:
This is Ford Escape2013!
This is Ford Fiesta2013!
This is Ford Focus2013!
This is Ford Fusion2013!
是不是有点小激动呢?别急,别一副作鸟兽散的样子,还有发布的流程呢?不过你要是真的急着wc或者觉得教程too simple,侯哥是不会让你捡肥皂的。
首先作为调试代码的部分我们是不需要push到github上的,所以将show.php打入冷宫,编辑.gitignore文件,在末尾加入show.php。这个时候有些小伙伴可能会疑惑了,为什么上面还有个/vendor/,记得我们init包的时候回答过一个问题么?
?
1
Would you like the vendor directory added to your .gitignore [yes]? yes
嗯嗯,你懂了吧?

2024-09-19 广告