Composer常用命令
目录
镜像应用
国内在使用composer前,建议更换镜像,详见: https://pkg.phpcomposer.com
推荐方式:
打开命令行窗口(windows用户)或控制台(Linux、Mac 用户)并执行如下命令:
composer config -g repo.packagist composer https://packagist.phpcomposer.com
1、搜索包
composer search
例子:搜索一个包含有 qiniu 的包
composer search qiniu
2、包的安装
composer require
composer install
例子:安装七牛php-sdk
composer require qiniu/php-sdk
输出:
Using version ^7.2 for qiniu/php-sdk./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 2 installs, 0 updates, 0 removals
- Installing topthink/think-image (v1.0.7): Downloading (100%)
- Installing qiniu/php-sdk (v7.2.7): Downloading (100%)
Writing lock file
Generating autoload files
说明: 安装后会产生两个文件和一个文件夹,如下: composer.json 是包的依赖文件; composer.lock 是包的版本锁定文件; vendor 是包的所在目录;
对于 require 和 install 是不相同的,require 会把包的信息添加到 composer.json 文件中并进行 install 。而 install 是直接从 composer.json 或 composer.lock 文件中提取依赖信息,然后进行安装。
3、更新包
composer update
例子:
到该网址查找一个包 https://packagist.org/
首先安装一个包,命令如下:
composer require qsnh/think-auth -v 0.2.0
查看composer.json
内容如下:
{
"require": {
"qiniu/qiniu": "dev-master",
"qsnh/think-auth": "0.2.0"
}
}
修改 composer.json 文件将 0.2.0 更新为 0.2.2 ,然后保存执行composer 更新包:
composer update
因为 composer update 的逻辑是按照 composer.json 指定的扩展包版本规则,把所有扩展包更新到最新版本,注意,是 所有扩展包,举个例子,你在项目一开始的时候使用了 monolog,安装的是 monolog 1.1 版本,而一个多月以后的现在,monolog 已经是 1.2 了,运行命令后直接更新到 1.2,这时项目并没有针对 1.2 进行过测试,项目一下子变得很不稳定,情况有时候会比这个更糟糕,尤其是在一个庞大的项目中,你没有对项目写完整覆盖测试的情况,什么东西坏掉了你都不知道。
4、删除包
composer remove xxx/xxxxx
删除刚才添加的包使用的命令是:
composer remove qsnh/think-auth
这样包就被删除了,查看一下 composer.json 文件,如下:
{
"require": {
"qiniu/qiniu": "dev-master"
}
}
这样包就被删除了。
5、依赖打包
如果项目中安装了不止一个包,可能安装了很多个项目依赖的包,需要对项目中的包依赖进行一个打包处理成为一个压缩文件。
composer archive
6、生成类库映射文件
比如我们经常会修改composer.json中autoload的配置,新增自己编写的类库,或者是覆盖第三方类库:
autoload的主要两个选项: files 和 psr-4。
"autoload": {
"psr-4": {
"app\\": "application",
"Test\\" :"test/"
},
"files":["extend/html-to-markdown-overwrite/autoload.php"]
},
上面的配置意思:新增命名空间Test,及新增自定义extend/html-to-markdown-overwrite/autoload.php
Test命名空间下的类库文件,在composer.json同一目录下建立文件夹test,并编写ClassTest类:
<?php
namespace Test;
class ClassTest{
public function getName(){
return "test";
}
}
?>
自定义autoload.php的文件,覆盖第三方类库(在composer安装的vnedor已经有该命名空间文件)League\HTMLToMarkdown\Converter\ImageConverter:
<?php
/**
* 重写html-to-markdown类文件
*/
spl_autoload_register(function ($class) {
$map = [
'League\HTMLToMarkdown\Converter\ImageConverter' => __DIR__ . '/ImageConverter.php',
];
if (isset($map[$class])) {
debug_log($class . ' loaded' . PHP_EOL);
include $map[$class];
return true;
}
// 注意需要设置prepend参数为true
}, true, true);
文件extend/html-to-markdown-overwrite/ImageConverter.php:
namespace League\HTMLToMarkdown\Converter;
use League\HTMLToMarkdown\ElementInterface;
class ImageConverter implements ConverterInterface
{
/**
* @param ElementInterface $element
*
* @return string
*/
public function convert(ElementInterface $element)
{
//@todo
}
/**
* @return string[]
*/
public function getSupportedTags()
{
return array('img');
}
}
修改了composer.json的autoload配置,只要简单的重新生成autoload自动加载器即可,不需要重新require或update:
composer dump-autoload
参考
基本用法 | Composer 中文文档 | Composer 中文网
命令行 | Composer 中文文档 | Composer 中文网
以上就是总结的一些命令了,关于安装的方法详见:
windows详见: windows10安装composer;
linux详见: Ubuntu安装composer;
@tsingchan