简介
Composer 是PHP的一个依赖管理工具,用于申明和安装项目所依赖的代码库
- 包管理器功能:全局安装时可以认为提供了包管理器的功能;但默认不认为Composer是包管理器,因为我们默认不全局安装任何东西
- 依赖管理:在项目基础上管理依赖包,安装在项目的目录(例如
vendor)中
声明依赖关系
创建一个composer.json文件,用于描述项目的依赖关系:
{
"require": {
"monolog/monolog": "1.2.*"
}
}
- 包名称:由提供商名称和项目名称组成,允许不同的人创建同名的项目名
- 包版本:可以定义具体的确切版本号,或者范围(
>=1.0, >=1.0,<2.0, >=1.0,<1.1|>=1.2),或者通配符(1.0.*),或者赋值运算符(~1.2,相当于>=1.2,<2.0)
安装和系统要求
运行Composer需要PHP 5.3.2+以上版本,我们将从包的来源直接安装,例如从git、svn、hg载入包。
- 局部安装:将下载
composer.phar(PHAR: PHP的归档)二进制文件到项目目录
- 全局安装:安装后可以直接运行
composer命令
- 安装依赖包:执行
composer install,将找到composer.json的组件最新版本,下载到vendor目录,同时创建一个composer.lock文件到项目根目录
composer.lock锁文件:composer会将安装时确切的版本号写入lock文件,锁定改项目的特定版本,推荐将锁文件提交到项目版本库中,若存在lock文件将忽略json中的定义
- 更新依赖包:执行
composer update,将根据composer.json获得组件库的最新版本并更新写入锁文件
自动加载
对于库的自动加载信息,Composer将生成一个 vendor/autoload.php 文件,引入此文件将会得到一个免费的自动加载支持:
require 'vendor/autoload.php'
PSR-4
我们可以在composer.json的autoload字段中增加自己的autoloader:
{
"autoload": {
"psr-4": {"Acme\\": "src/"}
}
}
Composer将注册一个PSR-4的autoloader到Acme命名空间,实现从命名空间到目录的映射;例如上例中src在我们的项目根目录,与vendor同级别,src/Foo.php文件应该包含Acme\Foo类。添加autoload字段后,需要再次运行install命令来生成vendor\autoload.php文件。
引用vendor\autoload.php文件将返回autoloader实例,可以将包含调用的返回值存储在变量中,并添加更多的命名空间,对于在一个测试套件中自动加载类文件时非常有用的:
$loader = require 'vendor/autoload.php';
$loader->add('Acme\\Test\\', __DIR__);
PSR-4 在键下定义从命名空间到路径的映射,相对于包根目录,当自动加载一个类(如指向目录的命名空间前缀)时,自动加载程序将查找已命名的文件并将其包含进来
classmap:允许类被自动加载,即使不符合PSR-0规范
classmap引用所有组合,都会在install/update过程中生成,并存储在文件中:
{
"autoload": {
"classmap": ["src/", "lib/", "file.php"]
}
}
Files
如果想要明确指定文件,在每次请求时都载入,可以使用files的autoloading,通常作为函数库的载入方式(非类库):
{
"autoload": {
"files": ["src/functions.php"]
}
}
库:资源包
- 每个项目都是一个包:目录中包含一个
composer.json,整个目录就是一个包;当你添加一个require到项目中,就是创建一个依赖于其他库的包;可以通过composer.json中的name来定义包名
- 平台软件包:安装在系统上,但并不由composer安装的包视为一个虚拟的平台软件包,包括PHP本身、PHP扩展和一些系统库
Composer命令行
- 初始化:
composer init
- 安装:
composer install
- 更新:
composer update
- 申明依赖:
composer require
- 全局执行:
composer global 命令
- 搜索:
composer search 包名
- 展示:
composer show 包名
- 依赖性检测:
composer depends
- 创建项目:
composer create-project ,类似于git clone命令后将包的依赖安装到它自己的vendor目录
资源库
包
Composer是一个依赖管理工具,它在本地安装一些资源包,本质是一些包含东西的目录,通常存储PHP代码,理论上可以是任何东西,并且包含一个描述(有一个名称和版本号)用于识别该包。
资源库
一个资源库是一个包的来源,它是一个packages/versions的列表,默认情况下将Packagist.org注册到Composer,可以在composer.json中申明更多的资源库。
Types
主资源库的类型位composer,使用一个单一的packages.json文件,包含所有的资源包的元数据。要引用一个composer资源库,只需要提供一个存放packages.json文件的目录路径,唯一必须的字段是packages,它的JSON结构如下:
{
"packages": {
"vendor/package-name": {
"dev-master": {@composer.json},
}
}
}
PEAR
PEAR类型资源库,使得从任何PEAR渠道安装资源包成为可能。
简介
Composer 是PHP的一个依赖管理工具,用于申明和安装项目所依赖的代码库
vendor)中声明依赖关系
创建一个
composer.json文件,用于描述项目的依赖关系:>=1.0,>=1.0,<2.0,>=1.0,<1.1|>=1.2),或者通配符(1.0.*),或者赋值运算符(~1.2,相当于>=1.2,<2.0)安装和系统要求
运行Composer需要PHP 5.3.2+以上版本,我们将从包的来源直接安装,例如从git、svn、hg载入包。
composer.phar(PHAR: PHP的归档)二进制文件到项目目录composer命令composer install,将找到composer.json的组件最新版本,下载到vendor目录,同时创建一个composer.lock文件到项目根目录composer.lock锁文件:composer会将安装时确切的版本号写入lock文件,锁定改项目的特定版本,推荐将锁文件提交到项目版本库中,若存在lock文件将忽略json中的定义composer update,将根据composer.json获得组件库的最新版本并更新写入锁文件自动加载
对于库的自动加载信息,Composer将生成一个
vendor/autoload.php文件,引入此文件将会得到一个免费的自动加载支持:PSR-4
我们可以在
composer.json的autoload字段中增加自己的autoloader:Composer将注册一个PSR-4的autoloader到
Acme命名空间,实现从命名空间到目录的映射;例如上例中src在我们的项目根目录,与vendor同级别,src/Foo.php文件应该包含Acme\Foo类。添加autoload字段后,需要再次运行install命令来生成vendor\autoload.php文件。引用
vendor\autoload.php文件将返回autoloader实例,可以将包含调用的返回值存储在变量中,并添加更多的命名空间,对于在一个测试套件中自动加载类文件时非常有用的:classmap:允许类被自动加载,即使不符合PSR-0规范
classmap引用所有组合,都会在install/update过程中生成,并存储在文件中:Files
如果想要明确指定文件,在每次请求时都载入,可以使用files的autoloading,通常作为函数库的载入方式(非类库):
库:资源包
composer.json,整个目录就是一个包;当你添加一个require到项目中,就是创建一个依赖于其他库的包;可以通过composer.json中的name来定义包名Composer命令行
composer initcomposer installcomposer updatecomposer requirecomposer global 命令composer search 包名composer show 包名composer dependscomposer create-project,类似于git clone命令后将包的依赖安装到它自己的vendor目录资源库
包
Composer是一个依赖管理工具,它在本地安装一些资源包,本质是一些包含东西的目录,通常存储PHP代码,理论上可以是任何东西,并且包含一个描述(有一个名称和版本号)用于识别该包。
资源库
一个资源库是一个包的来源,它是一个packages/versions的列表,默认情况下将Packagist.org注册到Composer,可以在
composer.json中申明更多的资源库。Types
主资源库的类型位composer,使用一个单一的
packages.json文件,包含所有的资源包的元数据。要引用一个composer资源库,只需要提供一个存放packages.json文件的目录路径,唯一必须的字段是packages,它的JSON结构如下:PEAR
PEAR类型资源库,使得从任何PEAR渠道安装资源包成为可能。