composer php生态环境中用来管理依赖关系的工具
2015-11-17 12:21
726 查看
composer是啥?
你可以在你的项目中声明所依赖的外部工具库,composer会帮助你安装这些库。
composer不是一个包管理器,他包含‘packlist’和'librains',它在每个项目的基础上进行管理,并在项目的某个目录(vendor)中进行安装,默认情况下它不会在全局安装,因此这仅仅是一个依赖管理
composer将这样为你解决问题:
1. 你的一个项目依赖于若干库
2.其中某一个库依赖于其它库
3.声明你所依赖的东西
4.composer会找出哪个版本的包需要安装,并且安装它们(将它们下载到你的目录中)
安装composer
composer的安装分为局部安装和全局安装,下面来说说俩者区别:
局部安装时,首先获取composer,可以使用命令(意味着将它下载到你的项目中)
如果,上面命令执行失败,可能通过php下载安装器
上面命令你将下载一个composer.phar包到你的目录中,它是php的归档,通过php的归档格式可以帮助用户在命令行中执行一些操作。
你也可以通过--install-dir指定composer.phar的安装目录,curl -sS https://getcomposer.org/install | php --install-dir=/usr/local/composer
全局安装,你可以装此文件放在任何地方,如果你把它放在系统的PATH上,那以意味着你能全局访问它。在unix系统中你甚至可以不添加php前缀。
使用命令可以让你composer在全局调用sudo mv composer.phar /usr/local/sbin/composer.phar,现在只需要输入composer命令就可以运行composer而不需要输入php composer.phar
检查composer是否正常运行
命令行运行composer,返回一个可执行命令列表就说明正常运行了
[root@wangjing wangjing]# composer
______
/ ____/___ ____ ___ ____ ____ ________ _____
/ / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
/_/
Composer version 1.0-dev (2f069bffd2e9c9acfebf993cc2a6d08ec867b52e) 2015-11-14 16:19:45
Usage:
command [options] [arguments
安装项目:
1. composer.json来安装项目
开始在你的项目中使用composer,你只需要一个composer.json文件,该文件中包含了项目的依赖和其它一些元数据。
只需要设置composer.json指定requier的key值,简单的告诉composer你项目需要哪些依赖
{
"require": {
"monolog/monolog": "1.0.*", //是历史安装记录
"frozennode/administrator": "5.*" //将要安装的
}
}
其中包名称是"frozennode/administrator",包版本是"5.*"
注意:执行install命令后,将创建一个
安装包依赖:
composer.json配置后执行composer install 命令时会报错,出错信息如下:
这个问题不要慌张,这是因为你修改了composer.json文件后其文件的md5sum值也变化了,composer就会警告你哈稀和composer.lock记录的值不同,所以才会Warning,哪怕你只在composer.json文件中新加了一个空格也会Warning,该怎么解决呢?update命令可以更新lock文件,但是如果仅仅是增加了一些描述信息,不打算更新任何库,可以使用composer update nothing,这样一来,不会更新库,但是可能更新 composer.lock文件。
注意:nothing并不是update关键字,只是没有nothing包导致的,如果输入foobar,结果也是一样。
如果你用的composer版本足够新,可以使用
2. 不修改composer.json文件来安装库
如果你觉得修改composer.json文件安装库麻烦,也可以使用requier命令
用法:
packagelist是composer的主要资源库,一个comoposer 的库基本上是一个包的源:记录了可以得到包的地方。packagelist的目标是成为大家使用库资源的中央存储平台,这意味着你可以require那里的任何包
自动加载
对于库的自动加载信息,Composer 生成了一个
这使得你可以很容易的使用第三方代码。例如:如果你的项目依赖 monolog,你就可以像这样开始使用这个类库,并且他们将被自动加载。
你可以在
autoloader。
Composer 将注册一个 PSR-4 autoloader 到
你可以定义一个从命名空间到目录的映射。此时
添加
引用这个文件也将返回 autoloader 的实例,你可以将包含调用的返回值存储在变量中,并添加更多的命名空间。这对于在一个测试套件中自动加载类文件是非常有用的,例如。
除了 PSR-4 自动加载,classmap 也是支持的。这允许类被自动加载,即使不符合 PSR-0 规范。详细请查看 自动加载-参考。
注意: Composer 提供了自己的 autoloader。如果你不想使用它,你可以仅仅引入
autoloader。
你可以在你的项目中声明所依赖的外部工具库,composer会帮助你安装这些库。
composer不是一个包管理器,他包含‘packlist’和'librains',它在每个项目的基础上进行管理,并在项目的某个目录(vendor)中进行安装,默认情况下它不会在全局安装,因此这仅仅是一个依赖管理
composer将这样为你解决问题:
1. 你的一个项目依赖于若干库
2.其中某一个库依赖于其它库
3.声明你所依赖的东西
4.composer会找出哪个版本的包需要安装,并且安装它们(将它们下载到你的目录中)
安装composer
composer的安装分为局部安装和全局安装,下面来说说俩者区别:
局部安装时,首先获取composer,可以使用命令(意味着将它下载到你的项目中)
curl -sS https://getcomposer.org/installer | php
如果,上面命令执行失败,可能通过php下载安装器
php -r "readfile('https://getcomposer.org/installer');" | php
上面命令你将下载一个composer.phar包到你的目录中,它是php的归档,通过php的归档格式可以帮助用户在命令行中执行一些操作。
你也可以通过--install-dir指定composer.phar的安装目录,curl -sS https://getcomposer.org/install | php --install-dir=/usr/local/composer
全局安装,你可以装此文件放在任何地方,如果你把它放在系统的PATH上,那以意味着你能全局访问它。在unix系统中你甚至可以不添加php前缀。
使用命令可以让你composer在全局调用sudo mv composer.phar /usr/local/sbin/composer.phar,现在只需要输入composer命令就可以运行composer而不需要输入php composer.phar
检查composer是否正常运行
命令行运行composer,返回一个可执行命令列表就说明正常运行了
[root@wangjing wangjing]# composer
______
/ ____/___ ____ ___ ____ ____ ________ _____
/ / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
/_/
Composer version 1.0-dev (2f069bffd2e9c9acfebf993cc2a6d08ec867b52e) 2015-11-14 16:19:45
Usage:
command [options] [arguments
安装项目:
1. composer.json来安装项目
开始在你的项目中使用composer,你只需要一个composer.json文件,该文件中包含了项目的依赖和其它一些元数据。
只需要设置composer.json指定requier的key值,简单的告诉composer你项目需要哪些依赖
{
"require": {
"monolog/monolog": "1.0.*", //是历史安装记录
"frozennode/administrator": "5.*" //将要安装的
}
}
其中包名称是"frozennode/administrator",包版本是"5.*"
注意:执行install命令后,将创建一个
composer.lock文件到你项目的根目录中,会把安装时的确切文件写到composer.lock文件里,每次安装依赖都会更新composer.lock文件。这个非常重要,因为install命令将会检查锁文件是否存在,如果存在它将下载指定的版本(忽略composer.json中的定义)
安装包依赖:
php composer.phar install 或者 conposer
composer.json配置后执行composer install 命令时会报错,出错信息如下:
这个问题不要慌张,这是因为你修改了composer.json文件后其文件的md5sum值也变化了,composer就会警告你哈稀和composer.lock记录的值不同,所以才会Warning,哪怕你只在composer.json文件中新加了一个空格也会Warning,该怎么解决呢?update命令可以更新lock文件,但是如果仅仅是增加了一些描述信息,不打算更新任何库,可以使用composer update nothing,这样一来,不会更新库,但是可能更新 composer.lock文件。
注意:nothing并不是update关键字,只是没有nothing包导致的,如果输入foobar,结果也是一样。
如果你用的composer版本足够新,可以使用
composer update --lock
2. 不修改composer.json文件来安装库
如果你觉得修改composer.json文件安装库麻烦,也可以使用requier命令
用法:
composer require "foo/bar:1.0.0"
packagelist是composer的主要资源库,一个comoposer 的库基本上是一个包的源:记录了可以得到包的地方。packagelist的目标是成为大家使用库资源的中央存储平台,这意味着你可以require那里的任何包
自动加载
对于库的自动加载信息,Composer 生成了一个
vendor/autoload.php文件。你可以简单的引入这个文件,你会得到一个免费的自动加载支持。
require 'vendor/autoload.php';
这使得你可以很容易的使用第三方代码。例如:如果你的项目依赖 monolog,你就可以像这样开始使用这个类库,并且他们将被自动加载。
$log = new Monolog\Logger('name'); $log->pushHandler(new Monolog\Handler\StreamHandler('app.log', Monolog\Logger::WARNING)); $log->addWarning('Foo');
你可以在
composer.json的
autoload字段中增加自己的
autoloader。
{ "autoload": { "psr-4": {"Acme\\": "src/"} } }
Composer 将注册一个 PSR-4 autoloader 到
Acme命名空间。
你可以定义一个从命名空间到目录的映射。此时
src会在你项目的根目录,与
vendor文件夹同级。例如
src/Foo.php文件应该包含
Acme\Foo类。
添加
autoload字段后,你应该再次运行
install命令来生成
vendor/autoload.php文件。
引用这个文件也将返回 autoloader 的实例,你可以将包含调用的返回值存储在变量中,并添加更多的命名空间。这对于在一个测试套件中自动加载类文件是非常有用的,例如。
$loader = require 'vendor/autoload.php';$loader->add('Acme\\Test\\', __DIR__);
除了 PSR-4 自动加载,classmap 也是支持的。这允许类被自动加载,即使不符合 PSR-0 规范。详细请查看 自动加载-参考。
注意: Composer 提供了自己的 autoloader。如果你不想使用它,你可以仅仅引入
vendor/composer/autoload_*.php文件,它返回一个关联数组,你可以通过这个关联数组配置自己的
autoloader。
相关文章推荐
- phpstorm 10 初体验
- php,CGI,Fast-Cgi,php-fpm介绍
- php imagepng生成图片加文本或水印
- yii2 Event 使用2
- Yii 连接、修改 MySQL 数据库及phpunit 测试连接
- thinkphp注册功能---图片验证码
- 小熊安卓学习总结:ubuntu 10.04下的配置tftp服务器
- 简易的PHP分词方法
- PHP防止用户重复提交表单
- PHP安装threads多线程扩展基础教程
- 超详细的php用户注册页面填写信息完整实例(附源码)
- yii2 Event的使用 1
- 使用PHPexcel把excel数据导入数据库
- php添加为kindeditor水印问题
- laravel old
- 教大家制作简单的php日历
- PHP最彻底的退出登录,清除session、cookie的代码
- php mysqli查错
- PHP检测终端设备是平板、手机还是电脑
- ThinkPHP3.1.3的学习之路(1)