Composer 笔记(PHPconf 台湾)

演讲人:by 大泽木小铁@KKBox

composer解决问题的场景:
方便接手项目的新人知道项目依赖于哪些类库(比如xml,log)

其他语言的套件管理系统:
node.js (npm), Ruby(gem), PHP (PEAR -> Pyrus即PEAR2 -> composer)

Comoser的优点:
- 可以针对项目,而非针对整个系统
- 可以检查执行环境
- 套件审核机制方便
- 设定文档编写简单,不需要用xml,而是用JSON
- 不需要用官方的套件库
- 流行
- 仿造npm和gem的依赖管理
- 支持VCS为下载源(SVN/GIT)

└── rootPackage
    ├── package1
    ├── package2
    │   ├── package4
    │   └── package5
    └── package3

package说明:
- package一般分为两类: application 和 library
- application package一般是root package,依赖于多个libraries
- library package也可以依赖于多个libraries

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

# 在项目根目录执行
php composer.phar <command> 

# 让composer在系统全局可用 (chmod 加执行权限)
sudo mv composer.phar /usr/local/bin/composer

# 获取帮助信息
composer list
composer help <command>
composer show -i 查看目前安装的套件

把项目放到composer来管理:
cd /path/to/project
composer init

于是composer会询问name、description、authors等

name:比如 "开发者名称/package-mame" 
description: 比如 "一句话描述"
authors: 比如 "Name <email>", 默认会抓取~/.gitconfig的设置
minimum-stability: 只能用在root package上,比如:
      stable(默认)、RC、beta、alpha、dev (排序按稳定性倒序)
license:比如 Apache-2.0, BSD-2-Clause, MIT 等(参考SPDX的identifier),私有的项目用proprietary表示

require: 比如 "开发者名称/package-name": "version" ,指的是依赖于哪些套件所有package 都需要有一个composer.json所有package 都需要有一个composer.json
require-dev:开发时安装,上线时不装,比如"phpunit/phpunit":">= 3.7.0", 格式同require,只能用在root package。

完毕后会生成一个composer.json文件

版本规则:
- 1.0.1 (明确指定)
- >= 1.0.1, < 2.0 (范围指定)
- 1.0.* (通配符指定)
- ~1.2 等价于 >=1.2, < 2.0 ; ~1.3.1 等价于 >=1.3.1, < 1.4.0 (下一个重要版本)

版本号+稳定度标识:在版本号后面可以加上: @<稳定度>, 比如:1.0.*@beta
稳定度+分支:dev-master
commit号表示:dev-master#2eb0c... 或 1.0.x-dev#2eb0c...

composer install 会先从 composer.json读取内容,然后读取下载的列表,再下载软件包,然后生成composer.lock(锁住目前安装的版本清单),该文件也要传到git里。新人在执行composer install时,就直接读取composer.lock列表里的清单中的套件。

composer update 会更新 composer.lock,它会找符合条件的最新的package。专案负责人才能执行第一次的install,之后的update也由专案负责人执行。(即凡事改动composer.lock文件的操作都由专案负责人执行)其他成员一律使用composer install。

所以,composer.json和composer.lock要commit到VCS里,library的composer.lock不要放到VCS里(因为library通常一直在更新),vendor也不要放。

官方套件库:(http://packagist.org)
-可搜索
-不像PEAR那样需要审核
- 不实际保存代码

composer先从packagist(默认的地方)拉取依赖包的清单,然后根据这份清单到VCS(比如github)拉取源代码。

用命令行搜索依赖包: composer require ,然后会询问搜索什么名称,比如输入phpunit,然后按提示操作


--prefer-source 从VCS下载
--prefer-dist 下载压缩文档(速度会快些)
--dev 安装开发用的套件
--no-update 不直接安装套件

查看平台上的套件:
composer show --platform
php开头 : php平台
ext-开头: 用PECL安装的套件
lib-开头: 系统函数库

可以在composer.json里把这些平台依赖写进去,比如:(需要手动写入)
"require" : {
  "php":">= 5.3",
  "ext-xdebug":">=2.3.3",
  "ext-http": ">= 1.7.6",
  "lib-openssl": ">= 0.9.8"
}

基于VCS(git)的composer.json:
{
  "require":{
      "vendor/私有仓库":"dev-master"
  },
  "repositories":[
    {
       "type":"vcs",
       "url":"[email protected]:vendor/私有仓库.git"
    }
  ]

}

repositories只能写在root package上,所以即便依赖包里的composer.json定义了repositories,composer也不会去使用。

自动载入: PSR-0,classmap,files 等类型

composer dump-autoload

命名空间和PEAR形式:
namespace格式: Vendor\Package\Class
PEAR格式:Vendor_Package_Class

"Vendor\", "Vendor\Package",
"Vendor_", "Vendor_Package_"

你可能感兴趣的:(Composer 笔记(PHPconf 台湾))