Composer包管理器
Composer包管理器
Composer的基本内容
composer的包管理是基于项目的。
Composer – PHP依赖管理的新时代
对于现代语言而言,包管理基本上是标配,著名的有NodeJS的npm,Python的pip,Java的Maven,Ruby的gem灯。
PHP的标准包管理工具是PEAR,不过PEAR有很多缺点:
- 依赖处理非常容易出问题
- 配置非常复杂
- 难用的命令行接口
Composer作为一个开源的PHP包管理工具,使用简单,功能强大,是替代PEAR使用的绝佳选择。
安装Composer
composer是作为一个.phar文件来发布的。安装composer要做的就是将composer.phar下载到我们的计算机上,相当的简单:
1
$ curl -sS https://getcomposer.org/installer | php
在这个命令中,我们可以使用--install-dir选项选择将composer安装到指定的目录:
1
$ curl -sS https://getcomposer.org/installer | php -- --install-dir=bin
也可以进行全局安装(即将composer.phar加入到环境变量中):
1
2
$ curl -sS https//getcomposer.org/installer | php
$ mv composer.phar /usr/local/bin/composer
声明依赖
在项目目录下创建一个composer.json文件,指明依赖:
1
2
3
4
5
{
"require": {
"monolog/monolog": "1.2.*"
}
}
安装依赖
1
composer install
自动加载
1
require 'vendor/autoload.php';
PHP 开发者该知道的5个Composer小技巧
仅更新单个库
1
composer update foo/bar
对于如下的警告信息
1
Warning: The lock file is not up to date with the latest changes in composer.json, you may be getting outdated dependencies, run update to update them.
如果你编辑了composer.json,就可能会看到这样的信息,哪怕是一个简单的空格。这种情况下,只需要执行update nothing:
1
2
3
4
5
6
$ composer update nothing
Loading composer repositories with package information
Updating dependencies
Nothing to install or update
Writing lock file
Generating autoload files
这样一来,composer不会更新库,只会更新composer.lock。
注意nothing不是update命令的关键字。只是没有nothing这个包导致的结果。如果你输入foobar,结果也一样。
最新的composer里支持使用--lock选项
1
composer update --lock
不编辑composer.json的情况下安装库
每安装一个库都要修改composer.json太麻烦了,不如直接用require命令:
1
composer require "foo/bar:1.0.0"
这种方法可以用来快速建立一个项目。init命令有--require选项,可以自动编写composer.json:
1
2
3
4
5
6
7
$ composer init --require=foo/bar:1.0.0 -n
$ cat composer.json
{
"require": {
"foo/bar": "1.0.0"
}
}
派生很容易
初始化的时候,使用create-project命令:
1
composer create-project doctrine/orm path 2.2.0
这会自动克隆仓库,并检出制定的版本。克隆库的时候用这个命令很方便,不需要寻找原始的url了。
考虑缓存,dist包优先
install和update的--prefer-dist选项表示我们要使用压缩包而不是克隆源码包。
若要修改,源代码优先
当你需要修改库的时候,克隆源码包就比下载压缩包方便了。使用--prefer-source来选择克隆源代码。
1
composer update symfony/yaml --prefer-source
为生产环境做准备
1
composer dump-autoload --optimize