composer 简介
介绍
Composer 是一个用于 PHP 依赖管理的工具。它实现了让你声明项目所依赖的库,并帮你完成安装 / 更新过程。
Composer 是类似 node’s npm 和 ruby’s bundler 的工具。
Composer 主要解决以下问题:
你有一个项目依赖于若干个库。
其中一些库依赖于其他库。
你声明你所依赖的东西。
Composer 会找出哪个版本的包需要安装,并安装它们(将它们下载到你的项目中)。
系统要求
Composer 要求 PHP 版本在 5.3.2 以上才能运行。还需要对 PHP 做一些设置和编译标志,在安装时会收到所有的不兼容警告。
从源码安装软件替代简单的解压压缩文件,你需要 git,svn,fossil 或者 hg 这取决于软件所用的版本控制工具。
Composer 是多平台的,可以在 Windows,Linux 和 OSX 上良好运行。
安装
- *nix 安装(Linux/Unix/MacOs)
- windows 安装
最简单的使用方法就是 composer 作为命令行工具使用 ,只需下载 composer.phar 文件到项目目录,执行下面命令,即可查看 composer
基本操作方法:
1 |
|
下载地址: https://getcomposer.org/download/
基本使用
若要在项目中使用 Composer 你需要一个 composer.json
文件。该文件描述了你的项目依赖关系和其他元数据。
require
首先是添加 require
参数 ,可以直接修改 composer.json
文件,也可以通过命令 composer require monolog/monolog
require
是告诉 Composer 你的项目所依赖的包有哪些 。
1 | { |
如上所示,require
获取了一个包名称 (例如 monolog/monolog
)映射到版本约束 (例如 1.0.*
)的 json 对象。
此时我们使用 composer install
时,会自动根据包中的依赖关系,来安装相对应的包。
require
参数的键值分别是 包名称 和 包版本约束
如这里的 monolog/monolog 是包名称
包版本约束
在我们使用composer安装包时,不得不考虑的就是一个版本问题,因为不同的版本,存在兼容性问题,因此我们在使用该工具安装包时需要特别的注意包版本,如果使用不当很容易导致项目因为包版本问题瘫痪。常见的几种如下:
1. 精准版本
明确要安装到那个版本,如需要安装包的版本是8.4.1
1 | "phpunit/phpunit": "v8.4.1", |
2. 通配符
既满足指定范围即可,如下范围在8.0到8.1之间
1 | "phpunit/phpunit": "8.0.*", |
3. 范围
范围常用的操作符有>,>=,<,<=,!=。你可以定义多个范围,使用空格或者逗号 , 表示逻辑上的与,使用双竖线 || 表示逻辑上的或。其中与的优先级会大于或。
1 | // 表示大于等于0.90并且小于3.0的版本 |
4. 波浪符 ~
该操作符限制最小版本号。
1 | 允许表达式中的最后一位版本号达到最大值 |
如 ~1.2 与 (>=1.2 && <2.0)相等,~1.5.6与(>=1.5.6 && < 1.6.0)相等。也就是主版本号与次版本号保持不变,修复版本号可以达到最大值。
5. 折音符 ^
该操作符约束锁定最大版本号。
1 | 锁定表达不变的是第一位主版本号,允许升级版本到安全的版本号 |
如^1.2就等于>=1.2 <2.0,^1.2.3就等于>=1.2.3 < 2.0.0。
依赖类型
require
通常包括平台包依赖 和 第三方依赖
- 平台包包括 PHP 本身、PHP 扩展和一些系统库。
1 | "require": { |
- 第三方依赖就是开发者造的各种轮子,各种扩展包等(如七牛sdk,微信sdk等)
引入使用
为了描述包的自动加载信息, Composer 会生成一个 vendor/autoload.php
文件,你可以简单的 include 这个文件,并在无需其它额外工作的情况下就可以使用这些包所提供的类:
1 |
|
在 composer.json
中还可以通过添加 autoload
指令,来添加自己的自动加载声明
1 | { |
基本命令
基本命令 | 解释 |
---|---|
composer init | 初始化 composer.json 文件 |
composer create-project | 将所有的代码及其依赖的包放到一个目录下,相当于执行了一个git clone命令 |
composer install | 读取 当前目录的 composer.json 文件,解决依赖关系,并把它们安装到 vendor 文件夹中 |
composer update | 获取最新版本的依赖以及升级 composer.lock 文件 |
composer update [vendor/package] ]vendor/package2] | 获取升级部分指定包依赖 |
composer require [vendor/package] | 将新的依赖添加到当前目录的 composer.json 文件中 (可指定版本) |
composer remove [vendor/package] [vendor/package2] | 移除 composer.json 中的扩展包 |
composer global require [friendsofphp/php-cs-fixer] | 全局依赖扩展安装,如全局 CLI 工具,phpcs |
composer global update | 升级全局依赖扩展包 |
composer search monolog | 搜索当前项目下的包仓库 |
composer show | 列出所有可用的包 |
更多命令 点击查看
Packagist(composer 资源库)
Packagist 是 Composer 的主要资源库。一个 Composer 库基本上是一个包的源:一个你可以得到包的地方。
Packagist 的目标是成为一个任何人都可以使用的中央仓库。这意味着你可以 require
那里的任何包,无需指定 Composer 查找包的位置。
当你访问 Packagist 网站 (packagist.org),你可以浏览和搜索包。
建议使用 Composer 的开源项目在 Packagist 上发布包。虽然并不一定需要发布在 Packagist 上来被 Composer 使用,但它使我们的编码更加轻松。
Composer 安装时候会向国外的 Packagist 服务器发送请求,因为众所周知的原因,国内请求国外服务器,有时会出现不稳定甚至不可用的情况。
Composer 国内镜像加速
以阿里云为例,全局模式(推荐):
1 | composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ |
单独项目使用:
1 | composer config repo.packagist composer https://mirrors.aliyun.com/composer/ |
composer.json
和 composer.lock
在使用composer后目录中会出现2个文件,composer.lock
和 composer.json
,现在来说说这两个文件的作用。
composer.json
文件中保存的是我们安装的组件及组件的版本要求。comopser.lock
文件中保存的是组件及其依赖的版本记录 , 并配合composer install
使用,保证了团队所有协作者开发环境、线上生产环境中运行的代码版本的一致性。
在使用composer install
的时候是不会修改composer.lock
这个文件,所以会把这个文件也放入版本管理中,其它人在使用时只需要composer install
就可以了。而使用composer update
后会修改这个文件。
composer.lock
这个文件主要是解决在协同开发中组件及其依赖的版本记录,防止不同人使用的组件及依赖版本不同。
推荐做法
- 应用 (project), 就是说是独立项目而不被其它项目依赖的,是推荐把
composer.lock
文件加入版本控制的,保证开发人员安装后的环境是一样的。 - 工具类 (library), 用于别人依赖使用的,不建议把
composer.lock
加入版本控制,因为很容易与其它包的依赖版本造成冲突。
创建扩展包
1. 创建项目仓库,新建github或者gitee 仓库
2. 创建 Composer 配置文件 composer.json 可以使用命令 compser init
创建也可以手动创建,最终文件内容大体如下:
1 | { |
3. 提交代码到 Github 仓库
根据自己需要实现的功能编写代码,本项目最终项目结构如下:
1 |
|
1 | //helpers.php |
composer.json
5. 发布包到 Packagist
6. 测试使用
演示地址:
- gitee 仓库 composer-example
- packsgist 地址 composer-example
- 新建
composer.json
1 | { |
执行
composer install
新建 demo 测试文件
1 | require __DIR__ . '/vendor/autoload.php'; |
composer.json 文件详解
1 | { |