文章

Composer包管理器

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包优先

installupdate--prefer-dist选项表示我们要使用压缩包而不是克隆源码包。

若要修改,源代码优先

当你需要修改库的时候,克隆源码包就比下载压缩包方便了。使用--prefer-source来选择克隆源代码。

1
composer update symfony/yaml --prefer-source

为生产环境做准备

1
composer dump-autoload --optimize
本文由作者按照 CC BY 4.0 进行授权

热门标签