Composer 概述
-
概述
- Composer是一个新的安装包管理工具,服务于PHP生态系统
- 它实际上包含了两个部分:Composer和Packagist
- Composer的使命就是帮你为项目自动安装所依赖的开发包
- Packagist是Composer的默认的开发包仓库
-
其他语言的包管理器
- Java 有 Maven
- Python 有 pip
- Ruby 有 gem
- Nodejs 有 npm
安装 Composer
-
环境
- Composer需要PHP 5.3.2+才能运行
- 通常情况下只需将composer.phar的位置加入到PATH环境变量就可以,不一定要全局安装
-
国内镜像配置
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
-
Windows平台
- 下载安装
https://getcomposer.org/Composer-Setup.exe
- 下载安装
-
Linux平台
- 命令行
$ curl -sS https://getcomposer.org/installer | php
- 这个命令会将composer.phar下载到当前目录
- PHAR(PHP 压缩包)是一个压缩格式,可以在命令行下直接运行
- 命令行
$ curl -sS https://getcomposer.org/installer | php -- --install-dir=bin
- 将Composer安装到指定的目录
- 全局安装
$ curl -sS https://getcomposer.org/installer | php
$ mv composer.phar /usr/local/bin/composer
- 命令行
-
Mac OS X平台
brew tap josegonzalez/homebrew-php
brew install josegonzalez/php/composer
声明依赖
- 概念
- 在项目目录下创建一个composer.json文件,指明依赖
- 比如,你的项目依赖 monolog
{
"require": {
"monolog/monolog": "1.2.*"
}
}
安装依赖
-
在项目目录下运行
composer install
-
如果没有全局安装的话,则运行
php composer.phar install
自动加载
- 概念
- Composer提供了自动加载的特性
- 只需在你的代码的初始化部分中加入下面一行
require 'vendor/autoload.php';
模块仓库
- 概念
- packagist.org 是Composer的仓库
- 很多著名的PHP库都能在其中找到
高级特性
仅更新单个库
-
composer update foo/bar
- 只想更新某个特定的库,不想更新它的所有依赖
-
composer update nothing
- Composer不会更新库,但是会更新composer.lock
- 用于Composer警告你哈希值和composer.lock中记载的不同
-
composer update --lock
- 如上,编辑了composer.json后出现了警告
不编辑composer.json的情况下安装库
-
composer require "foo/bar:1.0.0"
- 安装一个库都需要修改composer.json太麻烦
- 可以直接使用require命令
-
composer init --require=foo/bar:1.0.0 -n
- init命令有--require选项
- 可以自动编写composer.json
- 使用-n,这样就不用回答问题
派生很容易
composer create-project doctrine/orm path 2.2.0
- create-project命令,自动克隆仓库,并检出指定的版本
- 不需要搜寻原始的URI
考虑缓存 dist包优先
-
概念
- 最近一年以来的Composer会自动存档你下载的dist包
- dist包可以用于诸如dev-master之类的分支
- 可以使用install和update的--prefer-dist选项
-
实例
composer init --require="twig/twig:1.*" -n --profile
composer install --profile
若要修改,源代码优先
composer update symfony/yaml --prefer-source
- 使用--prefer-source来强制选择克隆源代码
为生产环境作准备
-
composer dump-autoload --optimize
- 在部署代码到生产环境的时候,可以优化一下自动加载
-
--optimize-autoloader
- 安装包的时候可以使用
- 可以减少20%到25%的性能损失