Composer 的中文是一个优美的名字 —— 作曲家,根据 X 度 X 科描述:Composer 是 PHP 5.3(我也不知道这儿是否应该有一个“及”)以上的一个依赖管理工具。简单来说我们可以把它看做 PHP 的“软件管家”。
怎么安装?…命令行找不到 composer
?环境变量 PATH
及其作用请了解清楚。
随便找一个地方新建文件夹用以存放 Composer 包/库,就叫 FirstLib
吧,在该目录下执行以下命令:
composer init
接着 Composer 会提示你输入一些东西,我们来看看啊:
Package name (/)
:需要创建的包名,格式为 发布者/包名
,举例 maxsky/first-lib
【必须全小写,发布者名称不含空格,一般为 GitHub 用户名】。方括号中的内容为根据你当前文件夹名称默认生成,如果无需更改直接回车使用Description
:包描述Author
:作者信息,默认引用 Git 全局配置文件 .gitconfig
中的名称和邮箱(如果有),格式为 名称 <邮箱地址>
,如:Max Sky
Minimum Stability
:最小的稳定版本,建议设置为 dev
Package Type
:包类型,可选的 4 种已在提示中,一般情况下我们填写 library
License
:许可,常用的 MIT
、Apache-2.0
,怎么选戳这儿:如何选择开源许可证? - 阮一峰的网络日志。实在不知道我们就用 MIT
吧Define your dependencies.
:定义你即将开发的包所需要的依赖,你可以在这里搜索并添加,也可以在后续修改 composer.json
文件,这儿我们连续两次输入 no
跳过(第二次是开发版本依赖)Do you confirm generation
:确认生成命令行中显示的信息,回车后 composer.json
文件出现在文件夹中个人习惯,会在 Composer 包的根目录创建 src
文件夹和 tests
文件夹
将功能代码放置于 src
中,测试代码放置于 tests
中(如无需要可省略)
这儿需使用自动加载。我们编辑刚刚生成的 composer.json
文件,在最后方添加如下内容
"autoload": {
"psr-4": {
"MyLib\\Component\\": "src"
}
}
强调 命名空间 必须 以 \\
结尾。同时 只有 在这儿设置了自动加载的命名空间后,项目中才能通过命名空间使用该包。
在这个包中,你可以进行任意发挥编写你所需要的功能。编写到一个阶段后结合项目开始我们的测试。
假设我们的项目使用的 Laravel、Lumen 一类支持 Composer 的框架
我们首先编辑 项目根目录(是项目不是 FirstLib 包)的 composer.json
文件,在最下方添加如下内容:
"repositories": {
"发布者名称": { // 如:maxsky(GitHub 用户名)
"type": "path",
"url": "包绝对路径" // Unix:/Users/xxx/Documents/GitHub/FirstLib
// Windows:E:\\MyComposerPackage\\FirstLib
}
}
然后在项目根目录运行命令行:(注意这个名称和我们创建包时的 Package name 是相同的)
composer require 用户名/包名 # 如:composer require maxsky/first-lib
稍等片刻,会出现类似如下提示:
Using version dev-master for maxsky/first-lib
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
- Installing maxsky/first-lib (dev-master): Symlinking from /Users/xxx/Documents/GitHub/FirstLib
Writing lock file
Generating optimized autoload files
此时我们戳开项目根目录的 vendor
文件夹,找到 你的名字,例如 vendor/maxsky
:
你会发现文件夹图标上有箭头↗,因为 Composer 自动创建了链接过来,这样你修改绝对路径中的代码,这儿也会跟着变。非常方便调试。
但如果修改了 包 中的 composer.json
文件,我们则需要在 项目根目录 再次执行下方命令以实现更新。
composer require maxsky/first-lib
无需 remove
再 require
。
一切 OK 后我们就可以在项目中通过命名空间的引入使用 包 里的各种东西了。
use MyLib\Component;
首先将代码提交至 GitHub,然后创建账户并登录 Packagist
在 Submit 提交界面中输入 Composer 包的 GitHub 地址,根据提示创建即可
最后需要通过 WebHook 钩子进行代码提交、发布的自更新。
什么意思呢?就是每次提交版本 tag 的时候,让 Packagist 去拉取最新代码以更新版本。
对了,如果确定要发布一个稳定的版本,为当前提交添加一个 release 或 tag 标签即可,格式 v1.12.0
那么怎么配置钩子?
首先打开 GitHub 刚提交的仓库,在 Settings
中点击 Webhooks
并添加
Payload URL
:填写 https://packagist.org/api/github
Content type
:选择 application/json
Secret
:填写在 https://packagist.org/profile 中的 API Token其它保持默认,确保 Active 勾选,保存即可。
最最最后,回到你项目下的 composer.json
文件,删除 repositories
部分内容并重新 composer require
包就能从线上获取啦!
如果因为使用 Composer 镜像获取不到,请注意镜像会有同步 Packagist 的延迟,参考:阿里云 Composer 全量镜像