php composer

参考

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
 
 
原文地址:https://www.cnblogs.com/gaoBlog/p/12448123.html