您的位置:首页 > 编程语言 > PHP开发

composer php生态环境中用来管理依赖关系的工具

2015-11-17 12:21 726 查看
composer是啥?

你可以在你的项目中声明所依赖的外部工具库,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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: