首先让我们踏着欢快的脚步去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即可: 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包的时候回答过一个问题么? Would you like the vendor directory added to your .gitignore [yes]? yes 嗯嗯,你懂了吧? 废话少说,经过职业玩家的一番噼里啪啦的敲击之后,代码被push到github上了,噼里啪啦的内容如下: $ git status # On branch master # Untracked files: # (use "git add <file>..." to include in what will be committed) # # .gitignore # composer.json # src/ nothing added to commit but untracked files present (use "git add" to track) $ git add . $ git commit -m "gogogo" $ git push 接下来需要将github上的代码同步到https://packagist.org/上,去[Packagist的网站](https://packagist.org/](https://packagist.org/)注册一个账号(Login with github是个不错的选择)。登录,然后点击的大大的绿色背景按钮 Submit a Package,在 Repository URL (Git/Svn/Hg) 处输入包在github上的地址,这里就是: https://github.com/GeHou/composer-car now,点击 Check,如果一切顺利,会返回项目的名称,确认后点击 Submit 完成抓取操作。 默认情况下Packagist是不会自动更新你在github上commit的代码的,在刚才导入的项目页面中点击 Force Update ,Packagist会抓取github上对应库的内容进行更新,但这还不是自动化的,幸运的是我们可以在Github库的设置中进行配置来消除手动更新的麻烦。 进入Github库的 Settings 页面,找到 Webhooks & Services 选项,点击 Configure services 按钮,在出现的列表中找到 Packagist,猛击它!这里需要填写一些信息,在Packagist网站的profile页面可以找到它们: User : Packagist上的用户名 Token : Packagist的授权令牌 Domain : http://packagist.org 补全后点击 Update settings,如果列表中显示绿剪头就表示OK了。 真的OK了吗?还是有点担心?大不了我们再测试下嘛! 先跳出root目录,在测试环境下新建一个文件夹: mkdir test-auto-update cd test-auto-update vim composer.json 这次我们不使用init命令,只往composer.json里填充一些简单内容: { "require": { "php": ">=5.3.0", "hou/composer-car": "dev-master" }, "minimum-stability": "dev" } 然后: composer install 安装完后扫一眼test-auto-update/src/Ford/Fiesta目录看下是否只有2013款的Fiesta,然后暂时就不需要理会此目录下的内容了,让我们回到composer-car目录。 注:这时test-auto-update/vendor下面的hou/composer-car对应建立项目时的( / ) [hou/composer-car]。 听说2014款的嘉年华出了,赶紧追加新的车款吧: 在 composer-car/src/Ford/Fiesta 目录下新建文件Fiesta2014.php,填充它: <?php namespace Ford\Fiesta; class Fiesta2014 { public static function info() { echo "This is Ford Fiesta2014!<br />"; } } 修改show.php,在最后追加: echo Fiesta\Fiesta2014::info(); 访问测试页,看看是否出现了: This is Ford Fiesta2014! ok,再次提交代码: git add . git commit -m "test auto update" git push 接着回到 test-auto-update 目录,这次要换一个命令耍耍,因为install命令之后root目录下会生成一个composer.lock文件,已经安装过的依赖是不能通过install命令进行更新的,所以这次需要使用composer update命令,试试这个命令,看看会发生什么: $ composer update Loading composer repositories with package information Updating dependencies (including require-dev) - Updating hou/composer-car dev-master (91bceb0 => 01550b4) Checking out 01550b4eeaa85513573ce7406ca7d46ee30c6978 Writing lock file Generating autoload files 类似这样的神秘信息又在屏幕上一闪而过,实际上因为网络的缘故,有时候得闪好久~ 不管怎么闪,更新成功后你就应该在 test-auto-update/vendor/hou/composer-car/src/Ford/Fiesta/ 文件夹下中找到新的 Fiesta2014.php 文件了。不过这里需要注意一点,有时候Packagist与Github之间的同步可能会出现延迟,这时不妨喝杯咖啡、找妹子聊会、扣扣鼻孔之类的噼里啪啦一会再回来试试更新操作。 好吧我们在 test-auto-update 根目录下新建一个 index.php 文件看看是否能跑起来,文件内容其实跟前面的show.php差不了多少: <?php require 'vendor/autoload.php'; use Ford\Fiesta as Fiesta; echo Fiesta\Fiesta2014::info(); 不错的话,运行index.php文件后浏览器会输出: This is Ford Fiesta2014!
转载于:https://my.oschina.net/plpy/blog/915420