如何創建一個自己的 Composer/Packagist 包 (PHP)
如何創建一個自己的 Composer/Packagist 包
首先讓我們踏着歡快的腳步去Github創建一個新庫,這裏取名 composer-car
,又歡快的將它克隆到本地:
git clone http://go.rritw.com/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": {
"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上的代碼同步到http://go.rritw.com/packagist.org/上,去[Packagist的網站](http://go.rritw.com/packagist.org/](http://go.rritw.com/packagist.org/)注冊一個账號(Login with github是個不錯的選擇)。登錄,然後點擊的大大的綠色背景按鈕 Submit a Package,在 Repository URL (Git/Svn/Hg) 處輸入包在github上的地址,這裏就是:
http://go.rritw.com/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!
至此更新操作也被證實是OK了,同志趕緊自己動手試試吧。
参考資料
中文文檔 http://go.rritw.com/composer.golaravel.com/
本文示例
http://go.rritw.com/github.com/GeHou/composer-car
http://go.rritw.com/packagist.org/packages/hou/composer-car
如何創建一個自己的 Composer/Packagist 包 (PHP)的更多相关文章
- 创建你的第一个Composer/Packagist包
今天我们要介绍一下如何通过Composer和Packagist向PHP社区贡献代码包.首先,如果你是一个PHP开发者但是还不知道什么是Composer,请先参考了一下这篇文章http://docs.p ...
- 开发一个属于自己的第一个Composer/Packagist包
Composer 给我们带来了诸多的好处: 模块化,降低代码重用成本 统一的第三方代码组织方式 更科学的版本更新 初始化项目,生成composer.json文件 初始实例项目代码目录结构: 现在要在项 ...
- 怎样創建 iOS 展開式 UITableView?
原文:http://www.appcoda.com.tw/expandable-table-view/ 译者:kmyhy(appcoda的驻站译者) 幾乎全部的 App 都會以導航的方式向用戶展示多個 ...
- 「Ionic」創建新項目
1.創建新項目 创建一个名为myApp的还有tabs的项目(ionic start <project-name> <optional-template>) 可选模板为sidem ...
- 使用TFS創建團隊項目
使用微軟賬號登錄Team Service,關聯一個TS賬戶,用來存放你所有的項目,可以從瀏覽器中直接訪問,地址類似yourname.visualstudio.com. 詳細鏈接 在TS賬戶主面板中,可 ...
- [Ms SQL] 基本創建、修改與刪除
##創建 table student, 內涵 id ,name ,tel三種columne,設定id為primary key create table student ( id int primary ...
- Centos7 創建快捷方式
usr/share/applications 創建文件 Gogland.desktop [Desktop Entry]Version=1Type=ApplicationName=GoglandGene ...
- nodejs創建目錄命令mkdir失敗
Windows系統 學習nodejs創建目錄命令:mkdir var fs = require('fs'); fs.mkdir('./tmp/test',function (err) { if(err ...
- 利用CMD 創建新文件的機種方法
用 CMD 創建新文件 説明一下: 是在Windows的 CMD命令行模式下,或者在PowerShell命令行模式下創建新文件的機種方法. 創建空文件 cd.>a.txt cd.表示改变当前目录 ...
随机推荐
- UVa 1303 - Wall
题目:有非常多点.修一座最短的围墙把素有点围起来,使得全部点到墙的距离不小于l. 分析:计算几何,凸包. 假设.没有距离l的限制.则答案就是凸包的周长了.有了距离限制事实上是添加了2*π*l. 证明: ...
- spring mvc json的输入输出
输入 前台代码: var cfg = { type: 'POST', data: JSON.stringify({userName:'winzip',password:'password',mobil ...
- loadrunner中log的使用初步总结
1.log的设置方式 . 在 runtime setting中可以设置log的生成方式: 默认的log方式: Enable logging选中,log option是Send messages onl ...
- [转]动态加载javascript
动态加载script到页面大约有俩方法 第一种就是利用ajax方式,把script文件代码从后台加载到前台,然后对加载到的内容通过eval()执行代码. 第二种是,动态创建一个script标签,设置其 ...
- 漫谈Github与开源,Git介绍以及Git的思想和基本工作原理 Git工作流程
漫谈Github与开源 文字亮点: 为什么这些优秀的工程师会开源自己的项目? 因为开源是一种精神. 无数的软件开发者苦心积虑保护自己的代码不被破解,而还是被聪明绝顶的脚本小子破解了,但破解无数软件的脚 ...
- eclipse 在Servers窗口创建一个Tomcat 6.0 Server失败
web项目部署到tomcat除了用eclipse插件,eclipse也有一个Servers窗口来部署. 问题背景:Servers窗口,我之前创建过一个Tomcat v6.0 Server,后来我把 ...
- 转 jmeter使用IP欺骗压力测试
jmeterIP 欺骗多IP 最近在使用jmeter进行压力测试时需要使用类似于loadrunner的IP欺骗功能,经问津度娘无果后决定再次耐心研究jmeter官方文 档,终于发现在jmeter2.5 ...
- Workflow_上传和下载Workflow编译方式(汇总)
2014-12-27 Created By BaoXinjian
- ADF_ADF Framework基本概念(概念)
2014-01-01 Created By BaoXinjian
- C语言笔记本
在此记录一些常见的C语言错误,可以当作学习C语言的笔记,需要的时候可以回过头看看. 1.关于“++” #include int main() { int a,b,cd; a=10; b=a++; c= ...