今天我們要介紹一下如何通過Composer和Packagist向PHP社區貢獻代碼包。首先,如果你是一個PHP開發者但是還不知道什么是Composer,請先參考了一下這篇文章http://docs.phpcomposer.com/00-intro.html,因為訪問海外鏡像源的速度較慢,也許你還需要這些方法https://pkg.phpcomposer.com/ 來獲取更多基礎信息。
使用Composer
Composer是PHP的一個包依賴管理工具。你可以使用第三方庫也可以自行開發。現在我要告訴你如何創建一個Composer包並且發送到Packagist(其他開發者可以通過它在他們項目中使用這些發布到Packagist上的包)。
創建包
你可以創建一個新項目來使用Composer。我們建一個輸出hello world 的類 。這是一個簡單的類但是你也可以創建復雜的項目來分享給其他開發者。Composer通常以“vendor/package” (廠商/包名)的方式來命名。這里我們為項目命名”chenjie/hello”。
文件結構
你可以把所有的文件都放在根目錄下,但是我特別推薦新建另一個文件夾 “src” 以更容易理解和維護你的代碼結構。項目結構如下:
1
2
3
4
5
|
hello $ tree
.
└──
src
└── SayHello.php
1 directories, 1 file
|
編輯hello (項目根目錄) /src/SayHello.php 文件:
1
2
3
4
5
6
7
8
9
10
11
|
<?php
namespace Hello;
class SayHello
{
public static function world()
{
return 'Hello World!';
}
}
|
開始Composer
現在要在項目的根目錄里創建一個composer.json
的文件,我們可以手動創建,也可以在根目錄里通過composer init
命令來根據提示創建:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
hello $ composer init
Welcome to the Composer config generator
This command will guide you through creating your composer.json config.
Package name (<vendor>/<name>) [cl/hello]: chenjie/hello
Description []: an example of composer package.
Author [chenjie <chenjie@chenjie.info>, n to skip]:
Minimum Stability []: dev
Package Type (e.g. library, project, metapackage, composer-plugin) []:
License []: MIT
Define your dependencies.
Would you like to define your dependencies (require) interactively [yes]?
Search for a package:
Would you like to define your dev dependencies (require-dev) interactively [yes]?
Search for a package:
{
"name": "chenjie/hello",
"description": "echo hello world"",
"license": "MIT",
"authors": [
{
"name": "chenjie",
"email": "chenjie@chenjie.info"
}
],
"minimum-stability": "dev",
"require": {}
}
Do you confirm generation [yes]?
|
根目錄下就生成了composer.json
文件,目錄結構如下:
1
2
3
4
5
6
|
hello $ tree
.
├──
composer.json
└──
src
└── SayHello.php
1 directories, 2 files
|
添加自動加載
然后我們可以手動編輯生成的composer.json
文件,添加php的版本要求和自動加載(使用PSR-4),使用Hello命名空間,加載src
目錄下的所有文件,如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
{
"name": "chenjie/hello",
"description": "echo hello world",
"license": "MIT License",
"authors": [
{
"name": "chenjie",
"email": "chenjie@chenjie.info"
}
],
"minimum-stability": "dev",
"require": {},
"autoload": {
"psr-4": {
"Hello\\": "src/"
}
}
}
|
進行測試
下面我們來簡單測試下我們的類是否工作正常。我們在項目根目錄執行:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
hello $ composer install
Loading composer repositories with package information
Updating dependencies (including require-dev)
Nothing to install or update
Writing lock file
Generating autoload files
hello $ tree -L 2
.
├──
composer.json
├──
composer.lock
├──
src
│
└── SayHello.php
└──
vendor
├── autoload.php
└── composer
3 directories, 12 files
|
創建測試文件
下面我們在根目錄下新建一個測試文件test.php
1
2
3
4
|
<?php
require_once __DIR__ . '/vendor/autoload.php';
use Hello\SayHello;
echo SayHello::world();
|
在項目根目錄下執行命令 php test.php
如果終端打印出“Hello World!”那祝賀你測試通過!
發布到Packagist.org
上面我們在本地完成了編寫和測試。那么想讓更多人使用我們的包就需要把我們新建的包發送到Packagist.org。首先我們可以先將項目發布到Github。我們先去Github 創建一個公有倉庫命名“hello”, 我們在項目根目錄使用Git命令來完成發布。
我們先在根目錄里創建.gitignore文件,把vendor目錄和composer.lock文件排除git在外。
1
2
3
|
hello (master) $ cat .gitignore
vendor/*
composer.lock
|
推送代碼
1
2
3
4
5
|
git init
git add .
git commit -m "First commit"
git remote add origin git@github.com:username/hello.git
git push origin master
|
當然我們也可以帶上tag標簽推送
1
2
|
git tag 1.0 -a
git push --tags
|
提交到Packagist
- 首先要在Packagist上注冊賬號並登錄
- 點擊頂部導航條中的Summit按鈕
- 在輸入框中輸入github上的倉庫地址,如:https://github.com/chenjiesuper/ansible-php
- 然后點擊Check按鈕
Packagist會去檢測此倉庫地址的代碼是否符合Composer的Package包的要求 - 檢測正常的話,會出現Submit按鈕,再點擊一下Submit按鈕,我們的包就提交到Packagist上了
- 以后更新代碼可以先從Packagist獲取token然后去github 配置下對應的GitHub Service Hook實現代碼提交后Packagist自動拉取更新
使用
我們就可以在其他項目引用chenjie這個包了,方法如下:
在新建的項目根目錄執行命令 composer require chenjie/hello
或者在新建項目根目錄新建composer.json編輯:
1
2
3
4
5
|
{
"require": {
"chenjie/hello":"dev-master" //這里的版本根據實際需要修改
}
}
|
然后執行 composer install 即可。
到這里我們的第一個Composer/Packagist包就完成了,但是你可以透過它做更多。謝謝!
參考
http://blog.jgrossi.com/2013/creating-your-first-composer-packagist-package/
http://qianlei.cc/create-your-first-composer-package/
今天我們要介紹一下如何通過Composer和Packagist向PHP社區貢獻代碼包。首先,如果你是一個PHP開發者但是還不知道什么是Composer,請先參考了一下這篇文章http://docs.phpcomposer.com/00-intro.html,因為訪問海外鏡像源的速度較慢,也許你還需要這些方法https://pkg.phpcomposer.com/ 來獲取更多基礎信息。
使用Composer
Composer是PHP的一個包依賴管理工具。你可以使用第三方庫也可以自行開發。現在我要告訴你如何創建一個Composer包並且發送到Packagist(其他開發者可以通過它在他們項目中使用這些發布到Packagist上的包)。
創建包
你可以創建一個新項目來使用Composer。我們建一個輸出hello world 的類 。這是一個簡單的類但是你也可以創建復雜的項目來分享給其他開發者。Composer通常以“vendor/package” (廠商/包名)的方式來命名。這里我們為項目命名”chenjie/hello”。
文件結構
你可以把所有的文件都放在根目錄下,但是我特別推薦新建另一個文件夾 “src” 以更容易理解和維護你的代碼結構。項目結構如下:
編輯hello (項目根目錄) /src/SayHello.php 文件:
開始Composer
現在要在項目的根目錄里創建一個composer.json
的文件,我們可以手動創建,也可以在根目錄里通過composer init
命令來根據提示創建:
根目錄下就生成了composer.json
文件,目錄結構如下:
添加自動加載
然后我們可以手動編輯生成的composer.json
文件,添加php的版本要求和自動加載(使用PSR-4),使用Hello命名空間,加載src
目錄下的所有文件,如下:
進行測試
下面我們來簡單測試下我們的類是否工作正常。我們在項目根目錄執行:
創建測試文件
下面我們在根目錄下新建一個測試文件test.php
在項目根目錄下執行命令 php test.php
如果終端打印出“Hello World!”那祝賀你測試通過!
發布到Packagist.org
上面我們在本地完成了編寫和測試。那么想讓更多人使用我們的包就需要把我們新建的包發送到Packagist.org。首先我們可以先將項目發布到Github。我們先去Github 創建一個公有倉庫命名“hello”, 我們在項目根目錄使用Git命令來完成發布。
我們先在根目錄里創建.gitignore文件,把vendor目錄和composer.lock文件排除git在外。
推送代碼
當然我們也可以帶上tag標簽推送
提交到Packagist
- 首先要在Packagist上注冊賬號並登錄
- 點擊頂部導航條中的Summit按鈕
- 在輸入框中輸入github上的倉庫地址,如:https://github.com/chenjiesuper/ansible-php
- 然后點擊Check按鈕
Packagist會去檢測此倉庫地址的代碼是否符合Composer的Package包的要求 - 檢測正常的話,會出現Submit按鈕,再點擊一下Submit按鈕,我們的包就提交到Packagist上了
- 以后更新代碼可以先從Packagist獲取token然后去github 配置下對應的GitHub Service Hook實現代碼提交后Packagist自動拉取更新
使用
我們就可以在其他項目引用chenjie這個包了,方法如下:
在新建的項目根目錄執行命令 composer require chenjie/hello
或者在新建項目根目錄新建composer.json編輯:
然后執行 composer install 即可。
到這里我們的第一個Composer/Packagist包就完成了,但是你可以透過它做更多。謝謝!
參考
http://blog.jgrossi.com/2013/creating-your-first-composer-packagist-package/
http://qianlei.cc/create-your-first-composer-package/