徐善通的随笔

千里之行, 始于足下



php依赖管理composer的使用总结


什么是composer

Composer是 PHP 用来管理依赖(dependency)关系的工具。你可以在自己的项目中声明所依赖的外部工具库(libraries),Composer 会帮你安装这些依赖的库文件。

Composer 不是一个包管理器。是的,虽然它涉及 "packages" 和 "libraries",但它在每个项目的基础上进行管理,在你项目的某个目录中(例如 vendor)进行安装。默认情况下它不会在全局安装任何东西。因此,这仅仅是一个依赖管理*

Composer 将这样为你解决问题:

  1. 你有一个项目依赖于若干个库。

  2. 其中一些库依赖于其他库。

  3. 你声明你所依赖的东西。

  4. Composer 会找出哪个版本的包需要安装,并安装它们(将它们下载到你的项目中)。

系统要求

运行 Composer 需要 PHP 5.3.2+ 以上版本。一些敏感的 PHP 设置和编译标志也是必须的,但对于任何不兼容项安装程序都会抛出警告。

Composer 是多平台的,可以运行在 WindowsLinux 以及 OSX

安装

下载 Composer 的可执行文件

curl -sS https://getcomposer.org/installer | php

注意: 如果上述方法由于某些原因失败了,你还可以通过 php >下载安装器:

php -r "readfile('https://getcomposer.org/installer');" | php

这将检查一些 PHP 的设置,然后下载 composer.phar 到你的工作目录中。这是 Composer 的二进制文件。这是一个 PHAR 包(PHP 的归档),这是 PHP 的归档格式可以帮助用户在命令行中执行一些操作。

你可以通过 --install-dir 选项指定 Composer 的安装目录(它可以是一个绝对或相对路径):

curl -sS https://getcomposer.org/installer | php -- --install-dir=bin

局部安装

通过上一步已经下载了 composer.phar, 此时可能在项目中使用 php composer.phar install 来使用composer

全局安装

每次使用composer都要写php composer.phar命令, 相信你一定厌烦了, 这里我们可以简化一下命令, 将我们的composer.phar文件放入系统的PATH目录, 可以直接运行

mv composer.phar /usr/local/bin/composer

注意: 如果上诉命令因为权限执行失败, 请使用 sudo 再次尝试运行 mv 那行命令。

现在只需要运行 composer 命令就可以使用 Composer 而不需要输入 php composer.phar

全局安装 (on OSX via homebrew)

Composer 是 homebrew-php 项目的一部分。

brew update
brew tap josegonzalez/homebrew-php
brew tap homebrew/versions
brew install php55-intl
brew install josegonzalez/php/composer

设置国内镜像

全局设置(推荐)

阿里云镜像
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
phpcomposer 镜像
composer config -g repo.packagist composer https://packagist.phpcomposer.com

项目设置单独设置

阿里云镜像
composer config repo.packagist composer https://mirrors.aliyun.com/composer/
phpcomposer 镜像
composer config repo.packagist composer https://packagist.phpcomposer.com

上述命令将会在当前项目中的 composer.json 文件的末尾自动添加镜像的配置信息(你也可以自己手工添加):

"repositories": {
    "packagist": {
        "type": "composer",
        "url": "https://packagist.phpcomposer.com"
    }
}

取消设置

解除镜像并恢复到 packagist 官方源,请执行以下命令:

composer config -g --unset repos.packagist

使用 Composer

除了库的下载,Composer 还准备了一个自动加载文件,它可以加载 Composer 下载的库中所有的类文件。使用它,你只需要将下面这行代码添加到你项目的引导文件中:

require 'vendor/autoload.php';

require Key

第一件事情(并且往往只需要做这一件事),你需要在 composer.json 文件中指定 require key 的值。你只需要简单的告诉 Composer 你的项目需要依赖哪些包。

{
    "require": {
        "monolog/monolog": "1.0.*"
    }
}

你可以看到, require 需要一个 包名称 (例如 monolog/monolog) 映射到 包版本 (例如 1.0.*) 的对象。

包名称

包名称由供应商名称和其项目名称构成。通常容易产生相同的项目名称,而供应商名称的存在则很好的解决了命名冲突的问题。它允许两个不同的人创建同样名为 json 的库,而之后它们将被命名为 igorw/jsonseldaek/json

包版本

在前面的例子中,我们引入的 monolog 版本指定为 1.0.*。这表示任何从 1.0 开始的开发分支,它将会匹配 1.0.01.0.2 或者 1.0.20

版本约束可以用几个不同的方法来指定。

名称 实例 描述
精确的版本号 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.0.9
赋值运算符 ~1.2 ~1.2相当于>=1.2,<2.0

安装依赖包

安装composer.json中的依赖到你的项目, 只需执行以下命令:

composer install

首次安装

这个命令将会根据composer.json文件中的定义, 找到符合的最新版本, 并下载依赖到./vendor文件夹中

同时, 还会生成一个composer.lock的锁文件, 关于这个文件 , 下面会讲到

非首次安装

如果当前目录存在composer.lock文件, 则执行composer install 命令时, 将会忽略composer.json文件中的配置, 直接下载composer.lock记录相应版本的依赖

composer.lock 锁文件

在安装依赖后,Composer 将把安装时确切的版本号列表写入 composer.lock 文件。这将锁定该项目的特定版本。

如果项目中使用了版本控制, 应当 将composer.jsoncomposer.lock提交到版本库中

当存在锁文件时, 不管斜体人执行composer install命令, 都会下载锁文件中对应的版本, 解决了多人开发时使用的依赖版本不一所引发的问题

更新依赖包

使用下面的命令来更新依赖包

composer update

如果依赖发布了新的版本, 但是由于composer.lock文件的限制, 我们仍然使用的是旧版本的依赖, 此时如果想更新依赖的版本, 就可以通过执行上面的命令来获取最新匹配的版本

使用update命令会将获取的最新的版本信息更新到composer.lock文件中

注意:

获取的是最新匹配的版本, 并不是最新版本, 如 composer.json 中的某一个依赖定义版本为 ~1.2, 则只会升级1.2后面的小版本

如果想升级到2.0或以上的版本, 请修改composer.json文件中的版本配置, 再次执行 update命令即可

自动加载

对于库的自动加载信息,Composer 生成了一个 vendor/autoload.php 文件。你可以简单的引入这个文件,你会得到一个免费的自动加载支持。

require 'vendor/autoload.php';

定义自己的加载命名空间

你可以在 composer.jsonautoload或者autoload-dev 字段中增加自己的 autoloader, 如:

{
    "autoload": {
        "psr-4": {"MyTest\\FirstTest\\": "src/path/to"}
    }
}

Composer 将注册一个 PSR-4 autoloader 到 MyTest\Firsttest命名空间。

更新自动加载文件

如果修改了autoload中的配置, 则必须执行下面的命令来重新生成autoload.php文件

# 这两个命令是等价的
composer dump-autoload
composer dumpautolead

命令行操作

官方地址

官方传送门: https://docs.phpcomposer.com/03-cli.html

忽略php版本要求

有时候我们在安装或依赖时, 依赖中指定了php版本, 该版本可能高于我们的版本也可能低于我们的版本, 不管是低还是高, 都会导致安装出错

此时可以通过添加--ignore-platform-reqs 参数来忽略php版本的检测, 如

composer install --ignore-platform-reqs
composer update --ignore-platform-reqs

忽略dev中的依赖

通过添加 --no-dev来跳过require-dev中的依赖

压缩autoload.php文件

composer dump-autoload -o

通过执行以上命令来压缩autoload文件, 加快加载速度, 推荐在生产环境使用

生产环境优化

composer install --prefer-dist --no-dev
composer dump-autoload -o

通过添加--prefer-dist参数来加快包的下载速度, --no-dev来跳过require-dev中的依赖

使用composer dump-autoload -o 命令来压缩自动加载文件


作者: 徐善通
地址: https://www.xstnet.com/article-132.html
声明: 除非本文有注明出处,否则转载请注明本文地址


我有话说



最新回复


正在加载中....

Copyrights © 2016-2019 醉丶春风 , All rights reserved. 皖ICP备15015582号-1