1、如何寻找需要的项目或源码
进入网站后,可以查询我们想要用的库文件,以monolog为例:
第一个排名下载量很高。所以我们就用这个了。我们点进去 https://packagist.org/packages/monolog/monolog
上面圈起来并备注的地方,比较重要
二.使用composer.json来加载和下载类库源码
新建一个文件夹,建立一个composer.json文件,文件内容如下
{
"require":{
"monolog/monolog":"1.24.0" //包名称:包版本
}
}
~
保存后在同级目录执行
composer install
命令执行后,开始自动下载,下载完毕后的目录如下所示
文件结构是:vendor文件夹+composer.lock+composer.json。composer.lock等会再说。进入vendor
里面是类库文件,我们下载的 composer,会将 composer 依赖的 psr 一起下载下来。autoload.php等会再说,它是一个自动加载类库,很强大,我们只需要加载找个文件,就能自动加载使用其他的类库了,不需要再手动加载。
3. composer.lock
打开这个文件,发现这几乎和composer.json是一样的格式和数据,也是各种约束关系,require文件等。
在安装依赖后,Composer 将把安装时确切的版本号列表写入 composer.lock 文件。这将锁定改项目的特定版本。以后就会以这个版本为主,只要有这个文件在,就会忽略所有的composer.json文件。这是非常重要的,因为 install 命令将会检查锁文件是否存在,如果存在,它将下载composer.lock指定的版本(忽略 composer.json 文件中的定义)。
如果不存在 composer.lock 文件,Composer 将读取 composer.json 并创建锁文件。
我们想想这样有什么作用呢?假设一个场景,多人开发,肯定会有人新的人开发完成将要后续开发,那么他肯定会去更新composer.json的依赖关系,那么其他人更新后,也会同样去更新,这样就乱了。他本来不想去更新,只想用原来的。所以有个这个composer.lock 文件,所有的人都会用一样的依赖关系版本。等全部都开发好了。再将这个composer.lock文件删掉就可以了。
这意味着如果你的requie的依赖更新了新的版本,你也不会获得任何更新。因为有composer.lock文件存在,此时要想更新你的依赖版本请使用 update 命令。这将获取最新匹配的版本(根据你的 composer.json 文件)并将新版本更新进锁文件composer.lock
如果我们确实需要更新依赖呢?我们可以使用 update 命令,它将重新生成composer.lock文件
composer update //更新所有包,慎用
composer update 包名称:包版本 //更新指定某个包
composer require 包名称:包版本 //更新指定某个包
4. 包版本的规则
名称 | 实例 | 描述 |
确切的版本号 | 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 。想要了解更多,请阅读下一小节 |
5. 下一个重要版本(波浪号运算符)
~ 最好用例子来解释: ~1.2 相当于 >=1.2,<2.0,而 ~1.2.3 相当于 >=1.2.3,<1.3。正如你所看到的这对于遵循 语义化版本号 的项目最有用。一个常见的用法是标记你所依赖的最低版本,像 ~1.2 (允许1.2以上的任何版本,但不包括2.0)。由于理论上直到2.0应该都没有向后兼容性问题,所以效果很好。你还会看到它的另一种用法,使用 ~ 指定最低版本,但允许版本号的最后一位数字上升。
默认情况下只有稳定的发行版才会被考虑在内。如果你也想获得 RC、beta、alpha 或 dev 版本,你可以使用 稳定标志。你可以对所有的包做 最小稳定性 设置,而不是每个依赖逐一设置。
6. autoload.php
前面说过,在vendor文件夹下面有一个autoload.php文件,这个文件有大大的用户,他是一个自动加载的文件,我们只要加载了它,那么我们就相当于讲其他的类库文件都加载了:
require 'vendor/autoload.php';
加载这一句就可以了。比如,我们在加载了这一句后,想调用mongolog,我们就可以直接用了,不需要另外加载它。
7.create-project
我们常见的框架symfony 和 Laravel 框架 可以使用这个命令下载
composer create-project laravel/laravel your-project-name 2.1.2
composer create-project symfony/framework-standard-edition your-project-name 2.1.2
8. composer的一些常用的命令:
composer list 列出所有可用的命令
composer init 初始化composer.json文件(就不劳我们自己费力创建啦),会要求输入一些信息来描述我们当前的项目,还会要求输入依赖包
composer install 读取composer.json内容,解析依赖关系,安装依赖包到vendor目录下
composer update 更新最新的依赖关系到compsoer.lock文件,解析最新的依赖关系并且写入composer.lock文件
composer search packagename 搜索包,packagename替换为你想查找的包名称
composer require packagename 添加对packagename的依赖,packagename可修改为你想要的包名称
composer show packagename
composer self-update 更新 composer.phar文件自身
composer command --help 以上所有命令都可以添加--help选项查看帮助信息