参考
https://www.isfirst.net/dev/143
https://www.jianshu.com/p/adcae6213e9b
composer是现代PHP的基石
现代高级编程语言,依赖管理工具是必不可少的。Java有Maven,Python有pip,Nodejs有npm.
而composer就是php依赖管理工具。
composer的安装
# 下载安装脚本 - composer-setup.php - 到当前目录 $ php -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php');" # 执行安装过程 $ php composer-setup.php # 删除安装脚本 $ php -r "unlink('composer-setup.php');" # 全局安装,将composer.phar移动到全局目录并重命名为composer (可以使用echo $PATH来查看全局目录) $ sudo mv composer.phar /usr/local/bin/composer # 更换为阿里云镜像源 $ composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
php composer-setup.php 安装后会在当前目录生成composer.phar文件
这时候composer就安装完成了,可以执行composer的相关操作。composer.phar是可执行文件
执行方法
./composer.phar (路径/composer.phar) //作为可执行文件执行 或者 php composer.phar //作为php的参数执行
这时还不能直接执行composer.phar,否则会报错,这是因为执行一个可执行文件时,如果不指明路径,就会到PATH变量包含的目录中查找,找不到就报错
[vagrant@localhost borg]$ composer.phar
-bash: composer.phar: command not found
要想不指明路径,而且在所有的目录下都可以执行composer,就需要将composer.phar文件移动到PATH包含的某个目录中去。即上面的全局安装所执行的命令。
需要注意,root用户和普通用户的PATH变量值并不相同,要想所有用户都能使用,可以将composer.phar文件放置到不同用户的PATH变量都包含的目录中去。
可以使用echo $PATH来查看PATH的值
echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/vagrant/.local/bin:/home/vagrant/bin
composer的常用命令
1.composer require
当我们要追加一个包或者更新一个包时使用,不依赖composer.json文件,也不依赖composer.lock文件
composer require 包名 //安装最新版本的包
composer require 包名:版本 //安装指定版本的包或者将包更新到指定版本,可以更新到高版本也可以更新到低版本
执行完composer require后,会在composer.json中追加或者更新相关信息,同时也会更新conposer.lock。如果执行时不存在composer.json文件,会生成
2.composer install
使用composer install会依赖composer.json和composer.lock文件,首先会在composer.json中查找要安装的包,然后再看看composer.lock文件中有没有相关的包信息。如果composer.lock文件中有相关的包信息,就按照lock文件的信息进行安装,如果没有,就按照json文件中指定的版本规则安装相应版本的包,并将所安装的包的想过信息写入到composer.lock文件中
install命令一般用于克隆一个项目后,安装所有需要的包,并保持包的版本一致(通过composer.lock文件来锁定包的版本等信息,从而保证所安装的包的一致性)
composer install
install后应该不加包名,而是只能根据json和lock文件进行安装
3.composer update
composer update只依赖composer.json文件,而不依赖composer.lock文件。它会根据composer.json文件中规定的版本规则将所有的包更新到最新版本。
注意,并不是包版本越新越好,所以此命令要慎用。
composer update //将所有的包更新到composer.json文件规定的最新版本 composer update 包名 //将指定包更新到composer.json文件规定的最新版本
update后可以加包名,应该不能加版本号
4.composer remove
composer remove用于卸载某个包
composer remove 包名
卸载后会更新composer.json和composer.lock文件中的相关信息
5.composer show
查看已经安装的包
[vagrant@localhost borg]$ composer show monolog/monolog 2.0.2 Sends your logs to files, sockets, inboxes, databases and various web services mustache/mustache v2.13.0 A Mustache implementation in PHP. psr/log 1.1.2 Common interface for logging libraries
查看某个包的详细信息,可以使用如下命令。比如查看所有的版本时
[vagrant@localhost borg]$ composer show mustache/mustache --all No composer.json found in the current directory, showing available packages from packagist.org name : mustache/mustache descrip. : A Mustache implementation in PHP. keywords : templating, mustache versions : dev-master, v2.13.0, v2.12.0, v2.11.1, v2.11.0, v2.10.0, v2.9.0, v2.8.0, v2.7.0, v2.6.1, v2.6.0, v2.5.1, v2.5.0, v2.4.1, v2.4.0, v2.3.1, v2.3.0, v2.2.0, v2.1.0, v2.0.2, v2.0.1, v2.0.0, v2.0.0-rc.1, 1.0.0, dev-dev, dev-tmp/template-inheritance-whitespace type : library license : MIT License (MIT) (OSI approved) https://spdx.org/licenses/MIT.html#licenseText source : [git] https://github.com/bobthecow/mustache.php.git e95c5a008c23d3151d59ea72484d4f72049ab7f4 dist : [zip] https://api.github.com/repos/bobthecow/mustache.php/zipball/e95c5a008c23d3151d59ea72484d4f72049ab7f4 e95c5a008c23d3151d59ea72484d4f72049ab7f4 names : mustache/mustache autoload psr-0 Mustache => src/ requires php >=5.2.4 requires (dev) phpunit/phpunit ~3.7|~4.0|~5.0 friendsofphp/php-cs-fixer ~1.11
6. composer search
查找某个包
composer serach 关键字
[vagrant@localhost borg]$ composer search monolog monolog/monolog Sends your logs to files, sockets, inboxes, databases and various web services monolog/monolog Sends your logs to files, sockets, inboxes, databases and various web services symfony/monolog-bundle Symfony MonologBundle symfony/monolog-bridge Symfony Monolog Bridge easycorp/easy-log-handler A handler for Monolog that optimizes log messages to be processed by humans instead of software. Improve your productivity with logs that are easy to understand. bramus/monolog-colored-line-formatter Colored Line Formatter for Monolog maxbanton/cwh AWS CloudWatch Handler for Monolog library wazaari/monolog-mysql A handler for Monolog that sends messages to MySQL theorchard/monolog-cascade Monolog extension to configure multiple loggers in the blink of an eye and access them from anywhere flynsarmy/slim-monolog Monolog logging support Slim Framework tylercd100/lern LERN (Laravel Exception Recorder and Notifier) is a Laravel 5 package that will record exceptions into a database and will notify you via Email, Pushover or Slack. inpsyde/wonolog Monolog-based logging package for WordPress. rahimi/monolog-telegram A handler for Monolog that sends messages to Telegram Channels mero/yii2-monolog The Monolog integration for the Yii framework. logentries/logentries-monolog-handler A handler for Monolog that sends messages to Logentries.com. kdyby/monolog Integration of Monolog into Nette Framework
查找包还可以在https://packagist.org/中查找
composer.json文件的包版本格式
在composer.json
中声明安装包时,需要指定包的版本,版本号的指定有多种格式:
- 确定的版本号
格式:1.0.2
最简单的指定方式,无歧义
- 在一定范围的版本号
可以定义多个范围,用逗号隔开,这将被视为一个逻辑AND处理。一个管道符号|将作为逻辑OR处理。 AND 的优先级高于 OR
>=1.0
: 大于或等于1.0版本
>=1.0,<2.0
: 大于或等于1.0,且小于2.0
>=1.0,<1.1|>=1.2
: 大于或等于1.0且等于1.1,或者大于等于1.2
- 通配符
1.0.*
: 只要满足以1.0开头的版本号均可
~
下一个重要版本
~1.2 相当于 >=1.2,<2.0
~1.2.3 相当于 >=1.2.3,<1.3
^
大于指定的版本
composer.lock文件
composer.lock文件是为了保证所有的协作者所安装的包的版本的一致性。是为composer install命令服务的
composer.json在指定版本时,不一定是精确指定,很多时候是使用范围指定,只有当我们安装了包,才知道最终安装了哪个版本。那么问题来了,如果我们半年后再根据composer.json来安装包,可能有些包的版本已经升级了,且向下不兼容,这就有可能导致程序报错。为避免这种问题,在执行composer install之后,composer会生成composer.lockcomposer.lock
在锁文件中可以看到完整的包信息,包括包的版本号。
composer install命令会先检查锁文件是否存在,如果存在,它将下载指定的版本(忽略composer.json文件中的定义)
锁文件非常重要!必须将文件上传到代码仓库,这样才能保证团队各成员所安装的包版本是一致的。
命令总结:
composer 显示所有命令
composer show 显示所有包信息
composer install
如有 composer.lock 文件,直接安装,否则从 composer.json 安装最新扩展包和依赖;
composer search packagename 搜索包
composer update 的逻辑是按照 composer.json 指定的扩展包版本规则,把所有扩展包更新到最新版本,注意,是所有扩展包#如不确定请勿运行!
composer update xxx/package 更新指定包
composer remove xxx/package 移除指定的包
composer require xxx/package 添加或者更新指定包
composer require xxx/package ~2.5
composer require xxx/package:2.5
composer require xxx/package=2.5
composer require xxx/package 2.5