什么是composer
composer是 PHP 用来管理依赖(dependency)关系的工具,传统的引入扩展包方式,必须手动使用require或者include来引入相关文件,这种方式及其不友好。而composer实现了一种自动加载机制,当你在文件中new 某个类时,composer会帮你自动尝试include相关的文件,但是php由于没有包的概念,没有import等关键词,没有语言层面的加载机制,所以composer的自动加载需要人为的制定一些相关的规范,只有符合psr-0(已废弃)或psr-4的代码编程规范的扩展包才能实现composer的自动加载机制
如何安装
- 第一种方法安装包
- 第二种方法手动安装
找到下载网址https://getcomposer.org/download/或者https://mirrors.aliyun.com/composer/composer.phar
将下载的composer.phar放到php安装目录下
在php的目录下执行命令
echo @php "%~dp0composer.phar" %*>composer.bat
中国镜像
由于官方的镜像在github下载速度过于缓慢,所有强烈建议改为阿里镜像,使用如下命令
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
或者在项目的composer.json中单独配置
composer config repo.packagist composer https://mirrors.aliyun.com/composer/
如何使用
- 如果使用了thinkphp,laravel框架等,框架内部已经引入了自动加载,会在入口文件的地方使用类似代码
require __DIR__.'/../vendor/autoload.php';
,composer的自动加载会在vendor目录下生成一个autoload.php文件,只要引入了这个文件,就能实现自动加载,以tp框架为例,在composer.json中有如下代码
"autoload": {
"psr-4": {
"app\\": "application"
},
"files": [
"app/Helpers/functions.php"
],
},
这个代码意思是将tp框架的跟目录下(与vendor平级的目录)的application目录映射为app的命名空间,凡是在application目录下的文件,只要psr-4的规范的都可以实现自动加载,下面那个files指的是app/Helpers/functions.php这个文件也会被自动加载
- 在一个空白项目中使用,首先使用
composer init
,创建一个composer.json文件,然后使用composer require xxx
引入某个扩展包,当你要使用这个扩展包文件时,只要在你的php入口文件(入口文件假设于vendor目录平级)中使用require ./vendor/autoload.php
,就可以实现自动加载这个扩展包,而无需手动引入
composer.json内容详解
只讲require字段,其它字段详细文档
- require 字段显示你引用了那些依赖
{
"require": {
"monolog/monolog": "1.0.*"
}
}
名称 | 实例 | 描述 | |
---|---|---|---|
确切的版本号 | 1.0.2 | 你可以指定包的确切版本 | |
范围 | >=1.0; >=1.0,<2.0; >=1.0,<1.1|>=1.2 | 通过使用比较操作符可以指定有效的版本范围。有效的运算符:>、>=、<、<=、!=。你可以定义多个范围,用逗号隔开,这将被视为一个逻辑AND处理。一个管道符号 | 将作为逻辑OR处理。AND 的优先级高于 OR。 |
通配符 | 1.0.* | 你可以使用通配符*来指定一种模式。1.0.*与>=1.0,<1.1是等效的。 | |
赋值运算符 | ~1.2 | 这对于遵循语义化版本号的项目非常有用。~1.2相当于>=1.2,<2.0。 |
composer.lock 锁定依赖版本
当你执行composer install
或 composer require xxx
后,会生成或改写一个composer.json,将当时的依赖版本进行锁定,可以将此文件加入git管理中,可以锁定项目的依赖版本,防止版本不同造成的兼容性问题
网友评论