# COMPOSER
向军大叔每晚八点在 抖音 (opens new window) 和 bilibli (opens new window) 直播

Composer 是 PHP 的一个依赖管理工具。它允许你申明项目所依赖的代码库,它会在你的项目中为你安装他们。
# 安装更新
使用下面命令即安装,但也可以查看官网 (opens new window)了解安装细节
# 安装
MAC/LINUX
使用 brew 安装是最简单的,支持 MAC 与 LINUX 操作系统
brew install composer
也可以使用下面的官方安装方法
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === 'c5b9b6d368201a9db6f74e2611495f369991b72d9c8cbd3ffbc63edff210eb73d46ffbfce88669ad33695ef77dc76976') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer
php -r "unlink('composer-setup.php');"
homestead 开发环境已经内置
WINDOWS
点击链接 https://getcomposer.org/Composer-Setup.exe
下载,直接安装就可以了。
# 更新
将 composer 更新到最新版本可以获取更多新特性
composer selfupdate
# 国内镜像
使用 composer 安装软件时是从远程服务器下载的,但国内用户访问国外网站会过慢或不能访问。有些机构将国外的软件同步到了国内服务器。我们将 composer 下载的服务器指向到这个国内服务器,就可以实现快速下载软件了。
使用国内镜像可以让我们下载软件包速度更快,下面是使用阿里云镜像 (opens new window)的配置方法。
全局配置
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
取消镜像
composer config -g --unset repos.packagist
项目配置
仅修改当前工程配置,仅当前工程可使用该镜像地址:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
取消配置:
composer config --unset repos.packagist
# 版本说明
使用 composer 开发软件包,掌握版本号在 composer 的使用非常重要。
# 范围版本
使用 > ,>=,<,<=,!= 指定版本范围,用逗号分隔为逻辑与,用 |
分隔为逻辑或。
示例 | 说明 |
---|---|
1.2.* | 大于 1.2 版本且小于 1.3 |
1.2.5 | 等于 1.2.5 版本 |
>=1.2 | 大于等于 1.2 版本的软件 |
>=1.2,<=2.5 | 大于等于 1.2 并且小于 2.5 版本 |
>2.0 | =1.5 | 大于 2.0 或等于 1.5 |
1.0-3.0 | 大于等于 1.0 并且小于等于 3.0 |
# 大版本号
使用 ^
限制大版本号的升级,一般来讲跨大版本号可能会有向下兼容性的问题
示例 | 说明 |
---|---|
^1.5.1 | >=1.5.1 并且 <2.0.0 |
^0.2 | >=0.3.0 并且 <0.4.0 |
# 次版本号
使用 ~
波浪号是对次版本号的限制
示例 | 说明 |
---|---|
~1.2 | >=1.2 并且 <2.0.0,即不超过 2.0 的所有版本 |
~1.2.3 | >=1.2.3 并且 <1.3.0 |
# 通配符
使用通配符指模糊匹配
示例 | 说明 |
---|---|
1.0.* | 大于等于 1.0,小于 1.1 版本 |
# 稳定版本
在根包 composer.json 文件中定义的minimum-stability
属性,决定了我们安装软件包的最低稳定版本,默认为stable
即 Release 最终稳定版。如果想安装软件包为dev
、alpha
、beta
、RC
版本的需要特殊指定。
下面对版本进行说明
版本 | 说明 |
---|---|
dev | 正在开发版本,如 TAG 为 2.0.0-dev |
alpha | 内部测试版本,如 TAG 为 2.0.0-alpha |
beta | 公开测试版本,如 TAG 为 2.0.0-beta |
RC(Release Candidate) | 最终测试版本,如 TAG 为 2.0.0-RC |
stable | 最终稳定版本,标准 TAG 为 2.0.1 |
如果您的 composer.json 中没有明确定义稳定版本 (opens new window),则 Composer 将在内部默认为-dev
或-stable
。如果希望明确考虑仅稳定发行版,可以添加后缀-stable
。
示例 | 说明 |
---|---|
1.2.3 | =1.2.3.0-stable |
>1.2 | >1.2.0.0-stable |
>=1.2 | >=1.2.0.0-dev |
>=1.2-stable | >=1.2.0.0-stable |
<1.3 | <1.3.0.0-dev |
<=1.3 | <=1.3.0.0-stable |
1 - 2 | >=1.0.0.0-dev < 3.0.0.0-dev |
~1.3 | >=1.3.0.0-dev <2.0.0.0-dev |
1.4.* | >=1.4.0.0-dev <1.5.0.0-dev |
# 扩展包管理
PHP 扩展软件包应用商店网址 https://packagist.org (opens new window) ,开发中通过在应用商店中搜索需要的软件包进行安装就可以了。
使用软件前先行访问软件包的 Github
的 Readme.md
文件或提供的网站查看使用说明。下面列出常用的 composer 命令使用
# 安装软件
根据 composer.lock 或 composer.json 文件下载软件包到 vendor 目录中
composer install
安装 require-dev
字段中列出的包
composer install --dev
跳过 require-dev
字段中列出的包
composer install --no-dev
安装项目
composer create-project houdunwang/hdcms hdcms
安装软件包
composer require houdunwang/wechat
安装指定版本的软件包
composer require "houdunwang/wechat:^3.1"
安装 MASTER 分支的代码
composer require houdunwang/wechat:dev-master
# 查看信息
查看所有安装的软件包
composer show
查看安装的指定软件包的详细信息
composer show houdunwang/wechat
# 更新软件
更新所有扩展包
composer update
更新指令的软件包
composer update houdunwang/wechat
# 删除软件
删除软件包
composer remove houdunwang/wechat
搜索软件包
composer search houdunwang/wechat
# composer.lock
在安装依赖后,Composer 将把安装时确切的版本号列表写入 composer.lock
文件。
提交代码时需要将 composer.lock 文件一并提交,下载代码时将使用 composer.lock 锁定的版本安装,而不使用 composer.json 中的版本,这会使用项目更稳定。
如果不存在 composer.lock 将使用 composer.json 下载软件包,并创建 composer.lock 文件。
使用 composer update 命令时会使用 composer.json 的版本号更新软件包,并更新 composer.lock 文件
# 扩展包开发
开发一个本地包的标准流程是 开发>git->packagist>使用
但是我们在进行本地开发时,尤其是为某些产品开发组件时,比如 laravel 框架等。这样的操作方式非常不方便,我们希望直接在本地开发,并可以正常使用 composer
功能。
# GITHUB
首先在 GITHUB 中创建项目
CLONE 项目到本地
git clone git@github.com:houdunwang/houdunren.git
# 创建项目
进入上面 CLONE 的项目 houdunren 目录中,远行 composer init
创建 composer.json 配置文件。
#项目名称一般以 github仓库名/包名 格式命名
Package name (<vendor>/<name>) [houdunren/houdunren]:
#项目介绍
Description []: 后盾人开源多平台管理系统
#作者以 作者<邮箱> 格式设置
Author [后盾人 <2300071698@qq.com>, n to skip]:后盾人 <2300071698@qq.com>
#安装软件包的最低稳定版本,默认为stable
Minimum Stability []:stable
#项目类型
Package Type (e.g. library, project, metapackage, composer-plugin) []:project
License []:MIT
# 自动加载
下面来定义软件的自动加载机制
类自动加载
在 composer.json 文件中声明 autoload
选项
{
...
"autoload": {
"psr-4": {
"houdunwang\\houdunren\\": "src"
}
},
...
}
添加类文件src/base/User.php
内容如下
<?php
namespace houdunwang\houdunren\base;
class User
{
static function show()
{
return "后盾人";
}
}
手动修改了 composer.json 文件后需要重新生成缓存文件
composer dump-autoload
文件加载
修改 composer.json 文件的 autoload 选项,在 files 选项中添加自动加载的文件
{
...
"autoload": {
"files": [
"src/helper.php"
],
"psr-4": {
"houdunwang\\houdunren\\": "src"
}
}
...
}
添加文件 src/helper.php
内容如下
<?php
function app()
{
return 'load service';
}
然后更新自动加载缓存文件
composer dump-autoload
# 项目入口
现在添加项目入口文件 public/index.php
<?php
use houdunwang\houdunren\base\User;
#引入自动加载处理
require '../vendor/autoload.php';
echo User::show();
echo app();
# 配置服务器
服务器环境使用 homestead 来说明,其它环境与之类似。
修改 Homestead.yaml 文件添加目录同步与域名绑定,本项目代码放在 ~/code/houdunren
目录中
folders:
...
- map: ~/code
to: /home/vagrant/code
...
sites:
...
- map: houdunren.test
to: /home/vagrant/code/houdunren/public
...
使用 switchHosts 软件配置域名解析
现在通过浏览器访问就可以看到输出内容了
http://houdunren.test
# 软件商店
下面在 https://packagist.org (opens new window) 分享我们上面开发的软件包
# 帐号设置
首先在网站使用 GITHUB 帐号登录与 GITHUB 进行连接授权
也可以在 GITHUB 中查看绑定情况,访问Applications > Authorized OAuth Apps
页面,搜索 packagist 看到以下链接并点击
如果看到以下内容表示绑定成功
# 发布软件
下面我们来将软件发布到 https://packagist.org (opens new window) ,如果下图进行项目提交
提交时出现以下错误
We had problems parsing your composer.json file, the parser reports: The
表示版本库中不存在 composer.json 文件,我们使用 GIT 提交代码到版本库。
但 vendor 目录不用提交,所以创建 .gitignore
文件添加以下内容
...
/vendor
...
然后提交代码
git add .
git commit -m '初始构建'
git push
然后回到 https://packagist.org (opens new window) 再次执行提交,如果看到以下界面表示成功
# 安装软件
软件已经发布到 packagist.org 了,我们来测试下安装
# 基本使用
下面创建目录来安装我们开发的软件包
mkdir hd
composer require houdunwang/houdunren
我们会发现有错误产生,这是告诉我们
Could not find a matching version of package houdunwang/houdunren. Check the package spe │
lling, your version constraint and that the package is available in a stability which ma │
tches your minimum-stability (stable).
这是因为 composer.json 中指定的minimum-stability
值为stable
,即最低要求为稳定版本。
可以修改 "minimum-stability": "dev"
来降低最低安装要求,就可以安装了
composer require houdunwang/houdunren
当然也可以指令 dev-master
来安装 master 分支代码
composer require houdunwang/houdunren:dev-master
# 生成版本
如果项目已经开发完成需要发布稳定版本,进入项目目录执行以下 GIT 指令
#为稳定版本打标签 1.0
git tag v1.0
#推送标签到GITHUB
git push --tags
现在我们会在 GITHUB 看到 tag
也会在 https://packagist.org (opens new window) 看到版本已经自动同步了
# 本地扩展
我们想创建一个扩展的同时,为本地已经存在项目使用。一般流程如下
- 修改扩展包后提交生成新版本
- 在本地项目上执行 composer update 进行更新
我们希望省掉上面的步骤,直接修改扩展包就可以为本地项目使用,目的已经介绍完了,我们来开始操作。
# 配置文件
比如我们的文件目录在 ~/code/houdunwang/arr
.
├── composer.json
├── src
│ └── Hd.php
└── tests
生成的 composer.json 配置文件,内容如下:
{
"name": "houdunwang/arr",
"description": "array extend module",
"license": "MIT",
"authors": [
{
"name": "houdunren",
"email": "2300071698@qq.com"
}
],
"autoload": {
"psr-4": {
"Houdunwang\\arr\\": "src/"
}
}
}
根据自己的需要自行修改文件内容,比如
require
其他的扩展
# 安装到项目
在 hdphp
或 laravel
其实是任何 composer 项目的根目录下执行:
composer config repositories.arr path ~/code/houdunwang/arr
这样就将包 arr
软链接到 ~/code/houdunwang/arr
。修改 ~/code/houdunwang/arr
目录下的文件,将影响到 vendor/houdunwang/arr
。
这里观察 laravel
等 composer 项目根目录下的 composer.json
会多一段内容:
...
"repositories": {
"arr": {
"type": "path",
"url": "/Users/xj/code/houdunwang/arr"
}
}
...
表示使用我们本地的 composer 包,而非 packagist 下载的包
安装本地包与远程包没有什么区别。
composer require houdunwang/arr:dev-master
至些我们已经完成了,直接在 houdunwang/arr 目录中开发就可以了,而非 vendor/houdunwang/module
目录。
# 常用命令
查看已经安装扩展包信息与版本
composer show -i
查看 composer 使用的镜像
composer config -l -g
# 常见问题
执行
composer dump-autoload
等命令时卡住不动将 Laravel-Modules 插件生成的模块中的 node_modules 目录删除