文章目录
一、Composer简介
对于现代语言而言,包管理器基本是标配。Java有Maven,NodeJs有NPM,Objective-C有CocoaPods,PHP有PEAR等。
但PEAR有如下缺点:
- 依赖处理容易出问题
- 配置非常复杂
- 难用的命令行接口
所以才有了Composer:
- Composer是PHP的一个依赖(dependency)管理工具,不是一个包管理器。它涉及“packages”和“libraries”
- 在项目中声明所依赖的外部工具库(libraries),Composer会自动安装这些工具库及依赖的库文件
比如下图,项目中A扩展是基于B和C扩展的,那么如果想要用A扩展的话,那么这3个扩展都得手动安装。如果是使用Composer来配置A扩展的话,那么Composer就会自动安装A的依赖B和C扩展。
Composer 不是像 Yum 或 Apt 一样的包管理器,虽然它会处理包或库,但它管理这些包、库是基于项目的,它会安装这些包、库到你项目的一个目录下(一般是在 vendor 文件夹里),默认情况下不会全局地安装。它做为一个包管理器,也支持一个叫做 " global " 的全局命令,我们可以使用此命令来安装全局的包。
这种扩展包的管理方式,不是 Composer 首创或独家专利,其实 Composer 很大程度上有受到 node 的 npm 和 ruby 的 bundler 的启发。
二、安装Composer
Compser需要在PHP 5.3.2+上安装,可以运行在Windows、Linux以及OSX平台上。
1. Linux安装
Linux是通过下载Composer可执行文件并运行该可执行文件来安装composer.phar
的
Composer 提供一个方便的安装器,你可以直接在命令行里直接执行它。 下载地址
下载composer.phar有两种方式:
-
直接下载:https://getcomposer.org/download/
-
命令行下载
命令行下载
命令行下执行以下命令来下载:
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
当前目录下会生成composer-setup.php文件
然后运行:
php composer-setup.php
该命令会检查当前的PHP.ini的配置是否满足条件,如满足则会下载好composer.phar文件,下载完成之后这个composer-setup.php文件可以删除了
下载好的composer.phar有两种安装方式:
- 局部安装:将composer.phar文件复制到任意目录(比如项目根目录下),然后通过php composer.phar指令即可使用composer了。
- 全局安装:
mv composer.phar /usr/local/bin/composer
在cmd中使用composer --version
进行验证即可
2. Windows安装
安装Composer有两种方式:
- 安装程序:下载并运行Composer-Setup.exe
- composer.phar:通用安装方式,可参考Linux安装
安装程序
下载并且运行 Composer-Setup.exe,它将安装最新版本的 Composer,然后设置系统环境变量即可
注意:需要开启 openssl 配置,打开 php 目录下的 php.ini,将 extension=php_openssl.dll
前面的分号去掉就可以了。
注意:如果是下载composer.phar文件进行安装的话,Windows系统需要将composer.phar拷贝到php.exe同级目录,新建一个composer.bat文件,并将以下代码保存到该文件中:
@php "%~dp0composer.phar" %*
3. 更新Composer
如果已经安装了Composer只是想要更新的话,可以使用以下命令进行更新:
composer selfupdate
三、Composer加速
由于国外的网站连接速度很慢,并且随时可能被墙,所以一般会使用国内的镜像进行加速,比如阿里云Compser全量镜像或Composer中国全量镜像。
Composer中国全量镜像和阿里云Compser全量镜像所做的就是缓存所有安装包和元数据到国内的机房并通过国内的CDN进行加速,这样就不必再去国外的网站发起请求。
查看当前的composer全局配置:
composer config -gl repo.packagist
如下图,其中箭头所指的表示镜像地址:
可以针对某个项目进行启用国内镜像加速,也可以全局配置Composer
配置单个项目为阿里云镜像:
在项目目录下cmd执行:
composer config repo.packagist https://mirrors.aliyun.com/composer/
然后打开composer.json,内容会发生变化:
"repositories": {
"packagist": {
"type": "composer",
"url": "https://packagist.phpcomposer.com"
}
}
配置全局变量为阿里云镜像:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
然后再查看当前使用的镜像地址即可
四、使用Composer
Composer主要命令有:
- 搜索(search)
- 展示(show)
- 申明依赖(require)
- 安装(install)
- 更新(update)
- 删除依赖(remove)
1. 初始化
新建一个目录abcd,然后cmd中进去该目录,先初始化:
composer init
输入包的名称(格式为:xxx/xxx),接着输入描述,接着输入作者以及邮箱(格式为: John [email protected]),接着输入版本(可以跳过),输入License(可以跳过),接着是否要定义依赖,可以先跳过
如下:
好了之后可以在当前目录中查看composer.json:
{
"name": "jiand/abcd",
"autoload": {
"psr-4": {
"Jiand\\Abcd\\": "src/"
}
},
"authors": [
{
"name": "xxx",
"email": "[email protected]"
}
],
"require": {
}
}
注意:composer init
的目的就是为了生成这个composer.json,也可以不需要这个命令,直接写好这个composer.json就可以了,内容也可以很精简:
{
}
2. 搜索
比如说要搜索个php库Monolog,是日志记录工具。
cmd下直接执行:
composer search monolog
可以看到有一个monolog/monolog,是想要的工具
3. 查看
查看已经安装的包或依赖
composer show
查看某个包的版本等信息:
composer show --all monolog/monolog
如下:
name : monolog/monolog
descrip. : Sends your logs to files, sockets, inboxes, services
keywords : log, logging, psr-3
versions : dev-master, 2.0.x-dev, 1.x-dev, 1.22.1, 1.20, 1.18.2, 1.18.1, 1.18.0, 1.17.2, 1.17.1, 1.17.0, 1.11, 1.13.0, 1.12.0, 1.11.0, 1.10.0, 1.9.1, 1.9.0, 1.8.0.1, 1.4.0, 1.3.1, 1.3.0, 1.2.1, 1.2.0, 1.1.0, 1.0.2, 1
type : library
license : MIT License (MIT) (OSI approved) https://spicenseText
source : [git] https://github.com/Seldaek/monolog.gid7c0a4e490729614
dist : [zip] https://files.phpcomposer.com/files/S9cb36f17b1cc2d7c0a4e490729614.zip 35c84c5b6f79cb36f17b
names : monolog/monolog, psr/log-implementation
4. 申明依赖
两种方式:
- composer.json中加入
- 直接命令:
composer require
composer.json中加入
在composer.json中加入monolog/monolog:
{
"name": "jiand/abcd",
"autoload": {
"psr-4": {
"Jiand\\Abcd\\": "src/"
}
},
"authors": [
{
"name": "xxx",
"email": "[email protected]"
}
],
"require": {
"monolog/monolog": "1.26.*"
}
}
然后cmd下安装:
composer install
这样会在该目录下生成vendor目录,里面会有下载好的依赖等。
直接命令申明依赖【推荐】
在该方式下甚至是可以不需要composer.json文件,直接进行composer require
即可,会自动生成composer.json
composer require symfony/http-foundation
运行之后会自动在composer.json中加入该扩展:
{
"name": "jiand/abcd",
"autoload": {
"psr-4": {
"Jiand\\Abcd\\": "src/"
}
},
"authors": [
{
"name": "xxx",
"email": "[email protected]"
}
],
"require": {
"monolog/monolog": "1.26.*"
}
}
并且会在vendor中增加symfony/http-foundation扩展。
也可以申明某个依赖的版本约束:
composer require php-amqplib/php-amqplib:2.*
5. 更新依赖
如果有以下情况,都可以进行更新依赖:
- 删除某个库
- 更改某个依赖的版本
- 新增依赖
- 更新所有依赖
- 更新某个依赖
比如在composer.json中删除掉require中的symfony/http-foundation的话,然后执行
composer update
即可删除该扩展
比如更新该项目下的所有依赖,也可以使用
composer update
注意:包能升级的版本会受到版本约束的约束,包不会升级到超出约束的版本的范围。例如如果 composer.json 里包的版本约束为 ^1.10,而最新版本为 2.0。那么 update 命令是不能把包升级到 2.0 版本的,只能最高升级到 1.x 版本。
比如更新该项目下的某个依赖:
composer update symfony/http-foundation
6. 删除依赖
可以通过composer remove
命令来删除某个依赖,比如:
composer remove symfony/http-foundation
五、Composer安装Laravel
有两种方式:
- 直接安装
- Laravel安装器
直接安装
通过Composer Create-Project 命令安装Laravel:
composer create-project laravel/laravel --prefer-dist [文件夹名]
也可安装指定版本的Laravel:
composer create-project --prefer-dist laravel/laravel [文件夹名] 5.8.*
Laravel安装器安装
通过以下命令来先安装Laravel安装器:
composer global require "laravel/installer"
然后加入系统的环境变量,把~/.composer/vendor/bin
的路径加到path中去,这样的话就可以使用laravel命令了。
创建Laravel项目:
laravel new [文件夹名]
如果想要创建最新开发版本的Laravel项目的话,使用:
laravel new [文件夹名] --dev
上面创建好的项目都可以在浏览器通过 域名/文件夹名/public 访问即可。