使用Composer
Composer是PHP的一个包依赖管理工具。你可以使用第三方库也可以自行开发。现在我要告诉你如何创建一个Composer包并且发送到Packagist(其他开发者可以通过它在他们项目中使用这些发布到Packagist上的包)。
https://pkg.phpcomposer.com/#how-to-install-composer (安装)
创建包
你可以创建一个新项目来使用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包就完成了,但是你可以透过它做更多。谢谢!
source:http://www.chenjie.info/1880