Appearance
COMPOSER
Composer 是 PHP 的一个依赖管理工具。它允许你申明项目所依赖的代码库,它会在你的项目中为你安装他们。
安装更新
使用下面命令即安装,但也可以查看官网了解安装细节
安装
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 下载的服务器指向到这个国内服务器,就可以实现快速下载软件了。
使用国内镜像可以让我们下载软件包速度更快,下面是使用阿里云镜像的配置方法。
全局配置
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 中没有明确定义稳定版本,则 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 ,开发中通过在应用商店中搜索需要的软件包进行安装就可以了。
使用软件前先行访问软件包的 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 banmawang/bmcms bmcms安装软件包
composer require banmawang/wechat安装指定版本的软件包
composer require "banmawang/wechat:^3.1"安装 MASTER 分支的代码
composer require banmawang/wechat:dev-master查看信息
查看所有安装的软件包
composer show查看安装的指定软件包的详细信息
composer show banmawang/wechat更新软件
更新所有扩展包
composer update更新指令的软件包
composer update banmawang/wechat删除软件
删除软件包
composer remove banmawang/wechat搜索软件包
composer search banmawang/wechatcomposer.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:banmawang/banmashou.git创建项目
进入上面 CLONE 的项目 banmashou 目录中,远行 composer init 创建 composer.json 配置文件。
#项目名称一般以 github仓库名/包名 格式命名
Package name (<vendor>/<name>) [banmashou/banmashou]:
#项目介绍
Description []: 斑马兽开源多平台管理系统
#作者以 作者<邮箱> 格式设置
Author [斑马兽 <237313142@qq.com>, n to skip]:斑马兽 <237313142@qq.com>
#安装软件包的最低稳定版本,默认为stable
Minimum Stability []:stable
#项目类型
Package Type (e.g. library, project, metapackage, composer-plugin) []:project
License []:MIT自动加载
下面来定义软件的自动加载机制
类自动加载
在 composer.json 文件中声明 autoload 选项
{
...
"autoload": {
"psr-4": {
"banmawang\\banmashou\\": "src"
}
},
...
}添加类文件src/base/User.php内容如下
<?php
namespace banmawang\banmashou\base;
class User
{
static function show()
{
return "斑马兽";
}
}手动修改了 composer.json 文件后需要重新生成缓存文件
composer dump-autoload文件加载
修改 composer.json 文件的 autoload 选项,在 files 选项中添加自动加载的文件
{
...
"autoload": {
"files": [
"src/helper.php"
],
"psr-4": {
"banmawang\\banmashou\\": "src"
}
}
...
}添加文件 src/helper.php 内容如下
<?php
function app()
{
return 'load service';
}然后更新自动加载缓存文件
composer dump-autoload项目入口
现在添加项目入口文件 public/index.php
<?php
use banmawang\banmashou\base\User;
#引入自动加载处理
require '../vendor/autoload.php';
echo User::show();
echo app();配置服务器
服务器环境使用 homestead 来说明,其它环境与之类似。
修改 Homestead.yaml 文件添加目录同步与域名绑定,本项目代码放在 ~/code/banmashou目录中
folders:
...
- map: ~/code
to: /home/vagrant/code
...
sites:
...
- map: banmashou.test
to: /home/vagrant/code/banmashou/public
...使用 switchHosts 软件配置域名解析

现在通过浏览器访问就可以看到输出内容了
http://banmashou.test
软件商店
下面在 https://packagist.org 分享我们上面开发的软件包
帐号设置
首先在网站使用 GITHUB 帐号登录与 GITHUB 进行连接授权

也可以在 GITHUB 中查看绑定情况,访问Applications > Authorized OAuth Apps 页面,搜索 packagist 看到以下链接并点击

如果看到以下内容表示绑定成功

发布软件
下面我们来将软件发布到 https://packagist.org ,如果下图进行项目提交

提交时出现以下错误
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 再次执行提交,如果看到以下界面表示成功

安装软件
软件已经发布到 packagist.org 了,我们来测试下安装
基本使用
下面创建目录来安装我们开发的软件包
mkdir bm
composer require banmawang/banmashou我们会发现有错误产生,这是告诉我们
Could not find a matching version of package banmawang/banmashou. 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 banmawang/banmashou当然也可以指令 dev-master 来安装 master 分支代码
composer require banmawang/banmashou:dev-master生成版本
如果项目已经开发完成需要发布稳定版本,进入项目目录执行以下 GIT 指令
#为稳定版本打标签 1.0
git tag v1.0
#推送标签到GITHUB
git push --tags现在我们会在 GITHUB 看到 tag

也会在 https://packagist.org 看到版本已经自动同步了

本地扩展
我们想创建一个扩展的同时,为本地已经存在项目使用。一般流程如下
- 修改扩展包后提交生成新版本
- 在本地项目上执行 composer update 进行更新
我们希望省掉上面的步骤,直接修改扩展包就可以为本地项目使用,目的已经介绍完了,我们来开始操作。
配置文件
比如我们的文件目录在 ~/code/banmawang/arr
.
├── composer.json
├── src
│ └── Bm.php
└── tests生成的 composer.json 配置文件,内容如下:
{
"name": "banmawang/arr",
"description": "array extend module",
"license": "MIT",
"authors": [
{
"name": "banmashou",
"email": "237313142@qq.com"
}
],
"autoload": {
"psr-4": {
"banmawang\\arr\\": "src/"
}
}
}根据自己的需要自行修改文件内容,比如
require其他的扩展
安装到项目
在 bmphp 或 laravel 其实是任何 composer 项目的根目录下执行:
composer config repositories.arr path ~/code/banmawang/arr这样就将包 arr 软链接到 ~/code/banmawang/arr 。修改 ~/code/banmawang/arr 目录下的文件,将影响到 vendor/banmawang/arr。
这里观察 laravel 等 composer 项目根目录下的 composer.json 会多一段内容:
...
"repositories": {
"arr": {
"type": "path",
"url": "/Users/hj/code/banmawang/arr"
}
}
...表示使用我们本地的 composer 包,而非 packagist 下载的包
安装本地包与远程包没有什么区别。
composer require banmawang/arr:dev-master至些我们已经完成了,直接在 banmawang/arr 目录中开发就可以了,而非 vendor/banmawang/module 目录。
常用命令
查看已经安装扩展包信息与版本
composer show -i查看 composer 使用的镜像
composer config -l -g常见问题
执行
composer dump-autoload等命令时卡住不动将 Laravel-Modules 插件生成的模块中的 node_modules 目录删除
