composer简介

composer 是 PHP 的一个依赖管理工具,它并不是一个包管理器,它允许开发人员声明项目所依赖的代码库,它会在项目中安装他们。

composer 利用 PSR-0 到PSR-4 以及 PHP5.3 的命名空间构造了一个繁荣的 PHP 生态系统。composer类似著名的 npm 和 RubyGems,给海量 PHP 包提供了一个异常方便的协作通道。

  • PSR-0 (Autoloading Standard) 自动加载标准
  • PSR-1 (Basic Coding Standard) 基础编码标准
  • PSR-2 (Coding Style Guide) 编码风格向导
  • PSR-3 (Logger Interface) 日志接口
  • PSR-4 (Improved Autoloading) 自动加载优化标准

为什么要使用composer

composer很好的解决了版本库不一致、存放位置不一致、依赖库引入不方便等问题,在进行项目开发时只需声明项目所依赖的东西,composer 会找出哪个版本的包需要安装,并将它们下载到项目中。

composer在实际生产中的应用

目前php的主流框架都使用了composer,常见的有Laravel 、Symfony 、CodeIgniter 3、Yii 2 等等。

重要的是,国产最流行的框架ThinkPHP在其5.1版本以后也开始使用composer进行安装和升级了

composer是php生态圈的救星,是php世界的潮流,是一个非常有必要掌握的工具

composer安装

windows

自动安装

点击composer_install下载并执行程序,根据提示选择PHP根目录,程序会自动为您配置环境变量

手动安装

1.下载一个composer.phar包 点此前往下载页

2.将composer.phar包放到你的开发目录(非强制,这里随意,我放在“E:\WebDevelop\composer”)

注意,这里需要确认php的环境变量配置是否正确,在命令行窗口直接输入并执行 php -v 命令即可检测
右击桌面上「计算机」,选择「属性」,选择「高级系统设置」,点击「环境变量」。
在系统变量中找到「Path」并双击,在变量值内添加:E:\WebDevelop\php

3.将composer目录添加到系统环境变量

4.打开“命令行窗口”,进入到你放置”composer.phar”文件的目录,然后使用以下命令

E:\WebDevelop\composer>echo @php "%~dp0composer.phar" %*>composer.bat

安装完成后会在同级目录下生成一个composer.bat的文件

5.在命令行输入以下命令,检查是否安装成功

composer -v

看到下面这样的画面就说明安装成功了

6.在中国局域网内,使用Composer是很慢很痛苦的,不过好在国内有镜像,所以我们还需要把镜像切换回国内

  • 方法1:执行以下命令切换到国内的镜像(全局)
composer config -g repo.packagist composer https://packagist.phpcomposer.com
  • 方法2:修改当前项目的 composer.json 的配置文件:
{
    "repositories": {
        "packagist": {
            "type": "composer",
            "url": "https://packagist.phpcomposer.com"
        }
    }
}

修改后再用 composer config -l -g 查看是否修改成功

国内镜像所做的就是缓存所有安装包和元数据到国内的机房并通过国内的 CDN 进行加速,这样就不必再去向国外的网站发起请求

Linux

curl -sS https://getcomposer.org/installer | php    #下载composer.phar
mv composer.phar /usr/local/bin/composer    #移动到环境下让其变成可执行
composer selfupdate    #进行版本更新

MacOS

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

使用

初始化工作目录

初始化工作目录

使用composer初始化工作目录,在项目的目录命令行输入:

composer init

编写composer.json文件

使用composer进行项目管理需要指定项目所依赖的库,需要编写composer.json声明依赖关系,格式如下:

{
    "name":"testor/composer_test"
    ,"require": {
        "提供者/项目名":"项目版本"
    }
}

每个项目都可以看成是一个包:

  • 使用“name”指定项目的包名称,从而让它成为一个可安装的包。
  • 使用“require”指定项目所需要安装的依赖包。

例如:在实际项目开发中需要使用PHP日志记录工具monolog,声明依赖如下:

{
    "name":"webdevelop/composer"
    ,"require": {
        "monolog/monolog": "1.0.*"
    }
}

1.0.* 是指依赖库的版本号,且是大于1.0小于1.1的

更多版本号声明方式

名称 实例 描述
确切的版本号 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.2 这对于遵循语义化版本号的项目非常有用。~1.2相当于>=1.2,<2.0

安装项目依赖

在composer.json文件所在目录命令行下执行如下命令:

php composer.phar install
或
composer install

安装项目依赖成功后的文件如下:

其中:
vendor文件夹存放了项目的依赖库;

  • composer把安装时确切的版本号列表写入composer.lock文件用来锁定composer,这将锁定该项目的特定版本。

composer.lock文件

当项目根目录下已经生成composer.lock文件时,当执行命令composer intsall时composer只会下载composer.lock文件指定的版本,忽略 composer.json 文件中的定义,从而确保团队成员都使用相同的依赖包。

更新依赖库

若package.json进行了修改需要更新依赖库和更新锁文件,可以执行以下命令:

php composer.phar update
或
composer update

在项目中使用composer

准备工作

配置composer.json文件如下:

{
    "require": {
        "monolog/monolog": "1.0.*",
        "driehle/php-crypt-md5": "2.0.*@dev"
    }
}

执行:

php composer.phar install

composer自动加载机制

对于库的自动加载信息,composer 生成了一个 vendor/autoload.php 文件。在项目中引入这个文件即可自动加载依赖库。

demo1

demo1的功能是使用php-crypt-md5这个库的加密函数。
在vendor同级目录下创建demo1.php,代码如下:

require 'vendor/autoload.php';
use Md5Crypt\Md5Crypt;
$cryptedpassword = Md5Crypt::unix ("123456" ,"123");
echo $cryptedpassword;

运行结果:

demo2
demo2的主要功能是使用monolog记录php日志。
在vendor同级目录下创建demo2.php,代码如下:

<?php
require 'vendor/autoload.php';
$log = new Monolog\Logger('name');
$log->pushHandler(new Monolog\Handler\StreamHandler('app.log', Monolog\Logger::WARNING));
$log->addWarning('Foo');

运行结果:

相关网址:
composer
composer中文网
packagist
Packagist / Composer中国全量镜像
Composer / Packagist 中国全量镜像
Laravel China 维护的 全量镜像

其他链接:
原文链接
composer常用命令

发表评论

电子邮件地址不会被公开。 必填项已用*标注