如果你知道yum
、apt-get
、npm
、bower
等命令中的一种或者多种,那么,你也能很快知道composer
是什么了。没错,它就是PHP里快速安装类库的。平时,我们安装一个PHP类库,需要搜索->下载
;使用composer
,我们只要知道包名,直接composer insatll
就可以了。
PHP 语言本身就带有强大的网络功能、文件管理功能和丰富的系统 API,Composer 也只是一段 PHP 脚本而已。
引自Composer中文网的描述:
是 PHP 用来管理依赖(dependency)关系的工具。你可以在自己的项目中声明所依赖的外部工具库 (libraries),Composer 会帮你安装这些依赖的库文件。
安装PHP库、依赖包。
$ composer require monolog/monolog
这是安装monolog库
$ composer create-project laravel/laravel learnlaravel5 5.0.22
这是安装laravel框架。
YII框架也是通过composer安装的。
通过composer可以使用大量的优秀的第三方库,不用自己重复的造轮子,大大节省开发时间。优秀项目示例:
你可以在 https://packagist.org/ 找到你需要的库。甚至你可以提交自己写的优秀的库到该平台里供大家使用。
如果不会composer
,流行的laravel
、yii
框架安装都成为问题,更不用谈学习了;很多优秀的轮子你无法使用。所以,推荐phper必须学会composer。
首先得安装composer命令行工具;
脚本自动安装:
下面是安装命令(来自https://getcomposer.org/download/):
php -r "readfile('https://getcomposer.org/installer');" > composer-setup.php
php -r "if (hash('SHA384', file_get_contents('composer-setup.php')) === 'fd26ce67e3b237fffd5e5544b45b0d92c41a4afe3e3f778e942e43ce6be197b9cdc7c251dcde6e2a52297ea269370680') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); }"
php composer-setup.php
php -r "unlink('composer-setup.php');"
按顺序执行即可。安装好后提示:
All settings correct for using Composer
Downloading...
Composer successfully installed to: /root/composer/composer.phar
Use it: php composer.phar
操作执行结束会在当前目录下生成compsoer.phar文件。
在linux中,composer.phar是可执行程序。例如我们可以使用:
php composer.phar update
执行更新操作。
进行全局安装:
mv composer.phar /usr/local/bin/composer
之后,就可以直接使用composer install
安装包了。不过通常情况下只需将composer.phar
的位置加入到PATH
就可以,不一定要全局安装。
手动安装
首先去https://getcomposer.org/download/下载https://getcomposer.org/download/1.2.0/composer.phar,建议下载最新版本的:
Latest Snapshot
1.2.0 (2016-07-18)
1.2.0-RC (2016-07-04)
1.1.3 (2016-06-26)
1.1.2 (2016-05-31)
下载后放到php安装位置里,然后
Linux:cp composer.phar /usr/bin/composer
chmod +x /usr/bin/composer
Windows:
新建
composer.bat #windows用
composer #git-bash用
composer.bat
@ECHO OFF
php "%~dp0composer.phar" %*
composer
#!/bin/sh
dir=$(d=$(dirname "$0"); cd "$d" && pwd)
# see if we are running in cygwin by checking for cygpath program
if command -v 'cygpath' >/dev/null 2>&1; then
# cygwin paths start with /cygdrive/ which will break windows PHP,
# so we need to translate the dir path to windows format. However
# we could be using cygwin PHP which does not require this, so we
# test if the path to PHP starts with /cygdrive/ rather than /usr/bin.
if [[ $(which php) == /cygdrive/* ]]; then
dir=$(cygpath -m $dir);
fi
fi
dir=$(echo $dir | sed 's/ /\ /g')
php "${dir}/composer.phar" $*
Linux需要给composer可执行权限。之后就可以使用composer了:
$ composer
______
/ ____/___ ____ ___ ____ ____ ________ _____
/ / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
/_/
Composer version 1.6.5 2018-05-04 11:44:59
Usage:
command [options] [arguments]
Options:
-h, --help Display this help message
-q, --quiet Do not output any message
-V, --version Display this application version
--ansi Force ANSI output
--no-ansi Disable ANSI output
-n, --no-interaction Do not ask any interactive question
--profile Display timing and memory usage information
--no-plugins Whether to disable plugins.
-d, --working-dir=WORKING-DIR If specified, use the given directory as working directory.
-v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
Available commands:
about Shows the short information about Composer.
archive Creates an archive of this composer package.
browse Opens the package's repository URL or homepage in your browser.
check-platform-reqs Check that platform requirements are satisfied.
clear-cache Clears composer's internal package cache.
clearcache Clears composer's internal package cache.
config Sets config options.
create-project Creates new project from a package into given directory.
depends Shows which packages cause the given package to be installed.
diagnose Diagnoses the system to identify common errors.
dump-autoload Dumps the autoloader.
dumpautoload Dumps the autoloader.
exec Executes a vendored binary/script.
global Allows running commands in the global composer dir ($COMPOSER_HOME).
help Displays help for a command
home Opens the package's repository URL or homepage in your browser.
info Shows information about packages.
init Creates a basic composer.json file in current directory.
install Installs the project dependencies from the composer.lock file if present, or falls back on the composer.json.
licenses Shows information about licenses of dependencies.
list Lists commands
outdated Shows a list of installed packages that have updates available, including their latest version.
prohibits Shows which packages prevent the given package from being installed.
remove Removes a package from the require or require-dev.
require Adds required packages to your composer.json and installs them.
run-script Runs the scripts defined in composer.json.
search Searches for packages.
self-update Updates composer.phar to the latest version.
selfupdate Updates composer.phar to the latest version.
show Shows information about packages.
status Shows a list of locally modified packages, for packages installed from source.
suggests Shows package suggestions.
update Upgrades your dependencies to the latest version according to composer.json, and updates the composer.lock file.
upgrade Upgrades your dependencies to the latest version according to composer.json, and updates the composer.lock file.
validate Validates a composer.json and composer.lock.
why Shows which packages cause the given package to be installed.
why-not Shows which packages prevent the given package from being installed.
easywechat
easywechat:extensions Lists all installed extensions.
在合适得位置新建文件夹。进入文件夹csdn,在csdn文件夹下新建文件composer.json:
{
"require": {
}
}
切换到csdn目录下,运行:
composer update
就会在该目录下生成一个vendor
文件夹。以后所有的第三扩展包都会安装在这里。
里面的代码大家可以看看。
安装扩展包:
以下以monolog为例:
首先声明依赖,变价composer.json文件:
{
"require": {
"monolog/monolog":"1.2.*"
}
}
如果不需要使用
https
,可以这么写,以解决有时候因为https造成的问题:
{
"require": {
"monolog/monolog":"1.2.*"
}
"config": {
"secure-http": false
}
}
现在
安装依赖:
安装依赖很简单,只要在项目目录(此示例的目录为csdn)下运行下面语句即可:
composer install
如果没有全局安装的话,则运行:
php composer.phar install
更新全部的包(谨慎使用):
composer update
注意:使用composer install
或者composer update
命令将会更新所有的扩展包,项目中使用需谨慎!!!
若只安装指定包推荐使用:
composer require monolog/monolog
如果指定版本,使用:
composer require "monolog/monolog:1.2.*"
更新某个包:
composer update monolog/monolog
移除某个包:
composer remove monolog/monolog
如果手动更新了composer.json文件,需要autoload:
composer dump-autoload
包版本约束:
精确版本,示例:1.2.1;
范围:使用比较操作符可以指定包的范围。这些操作包括> 、 >= 、< 、<=、!=。你可以定义多个范围,使用空格或者逗号表示逻辑上的与,使用双竖线表示逻辑上的或。其中与的优先级大于或。示例:
>=1.0
>=1.0 <2.0
>=1.0,<2.0 || >=1.2
范围(使用连字符)
例子:1.0-2.0 等同于 >=1.0.0 <2.1 (2.0等同2.0.*)
通配符:可以使用通配符定义版本 1.0.* 相当于>=1.0 <1.1。
示例:1.0.*
下一个重要版本操作符:
使用波浪号~:
~1.2 相当于>=1.2 <2.0.0,而~1.2.3 相当于 >=1.2.3 <1.3.0
使用折音符^:
^1.2.3 相当于 >=1.2.3 <2.0.0
因为在2.0版本前的版本应该都没有兼容性的问题。而对于1.0之前的版本,这种约束方式也考虑到了安全问题,例如 ^0.3 会被当作 >=0.3.0 <0.4.0 对待。
Composer提供了自动加载的特性,只需在你的代码的初始化部分中加入下面一行:
require 'vendor/autoload.php';
{
"require": {
"php": ">=5.4.0",
"illuminate/database": "*",
"monolog/monolog": "1.2.*"
},
"config": {
"secure-http": false
},
"autoload": {
"classmap": [
"app/models"
],
"files": [
"vendor/yjc/src/Alipay/autoload.php"
],
"psr-4": {
"Yjc\\Sms\\": "vendor/yjc/src/Sms"
}
}
}
autoload
部分指定自动加载的文件夹,每次里面的文件有新增,使用composer dump-autoload
即可。
命令汇总:
composer list 列出所有可用的命令
composer init 初始化composer.json文件(就不劳我们自己费力创建啦),会要求输入一些信息来描述我们当前的项目,还会要求输入依赖包
composer install 读取composer.json内容,解析依赖关系,安装依赖包到vendor目录下
composer update 更新最新的依赖关系到compsoer.lock文件,解析最新的依赖关系并且写入composer.lock文件
composer search packagename 搜索包,packagename替换为你想查找的包名称
composer require packagename 添加对packagename的依赖,packagename可修改为你想要的包名称
composer show packagename
composer self-update 更新 composer.phar文件自身
composer dump-autoload --optimize 优化一下自动加载
composer command --help 以上所有命令都可以添加 --help选项查看帮助信息
更多可用命令,可以在命令行输入composer
进行查看。
模块仓库:
packagist.org是composer仓库,许多著名的composer库都可以在其中找到,你也可以提交自己的作品。
当你安装完composer后。使用时却发现不能下载composer包。或者很慢,这是一个总所周知的原因。
所以,我们使用国内的镜像站点代替,常用的方式有两种:
1.修改全局配置。
全局配置这个文件一般会放在C:\Users\XXX\AppData\Roaming\Composer\config.json
,例如C:\Users\YJC\AppData\Roaming\Composer\config.json
。(这里以windows路径为例)。可以通过命令composer config -l
查看配置,其中[home]
为配置所在目录。config.json
即为配置文件。
{
"config": {
},
"repositories": [
{"type": "composer", "url": "http://pkg.phpcomposer.com/repo/packagist/"},
{"packagist": false}
]
}
或者使用命令直接修改
composer config -g repo.packagist composer https://packagist.phpcomposer.com
2.修改当前配置,即项目的当前路径的composer.json文件。
{
"require": {
"noahbuscher/macaw": "dev-master"
},
"repositories": [
{
"packagist": false
},
{
"type": "composer",
"url": "http://packagist.cn"
}
]
}
3、常见镜像地址:
http://packagist.phpcomposer.com 中国全量镜像
推荐的优秀的包:
overtrue/wechat 让微信开发更简单!
thenbsp/wechat
catfan/medoo
illuminate/database
psr/log
monolog/monolog
symfony/event-dispatcher
phpunit/phpunit
phpunit/php-timer
michelf/php-markdown markdown 文档解析
intervention/image 图片处理
mytharcher/alipay-php-sdk
更多查看:https://packagist.org/explore/popular
发布自己的包:
大概步骤如下:
编写composer.json文件:
{
"name": "jenner/message_queue",
"description": "php message queue wrapper",
"license": "MIT",
"keywords": ["message queue"],
"version": "1.0.0",
"authors": [
{
"name": "Jenner",
"email": "[email protected]"
}
],
"require": {
"php": ">=5.3.0"
},
"autoload": {
"psr-0": {
"Jenner\\Zebra\\MessageQueue": "src/"
}
}
}
需要注意几个字段说明如下:
name:包名称,递交packagist时会检测命名是否合法,必须有一个/分割。当别人引入你的包时会自动在vendor文件夹下创建这个目录。例如monolog/monolog包,会在vendor文件夹下创建monolog/monolog文件夹。
autoload:包的加载方式,具体加载方式可以参考composer中文网说明。这里使用的时psd-0标准加载反射光hi。composer会在src目录下根据命名空间执行自动加载。
背景:
Framework Interoperability Group(框架可互用性小组),简称 FIG,成立于 2009 年。FIG 最初由几位知名 PHP 框架开发者发起,在吸纳了许多优秀的大脑和强健的体魄后,提出了 PSR-0 到 PSR-4 五套 PHP 非官方规范:
之后,在此标准之上,Composer 横空出世!Composer 利用 PSR-0 和 PSR-4 以及 PHP5.3 的命名空间构造了一个繁荣的 PHP 生态系统。Composer 类似著名的 npm 和 RubyGems,给海量 PHP 包提供了一个异常方便的协作通道,Composer Hub 地址:https://packagist.org/。Composer 中文网站:http://www.phpcomposer.com/。
目前 PHP 界风头正劲的 Laravel 和 Symfony 均直接基于 Composer,大家耳熟能详著名框架 CI 和 Yii 的正开发版本 CodeIgniter 3 和 Yii 2 也都基于 Composer(更新:北京时间2014年10月13日 Yii 2 已经发布)。Composer 就是 PHP 框架的未来,有了它,让 CI 的路由和 Laravel 的 Eloquent ORM 协作就会变的非常简单。
常见问题:
Windows下出现:Fxp\Composer\AssetPlugin\Repository\NpmRepository does not exist
进入C:\Users\YJC\AppData\Roaming\Composer目录,删除vendor目录。
有用的资源:
1、利用 Composer 一步一步构建自己的 PHP 框架(一)——基础准备 - 岁寒
https://lvwenhan.com/php/405.html
2、PHP 开发者该知道的 5 个 Composer 小技巧 - 新闻 - SegmentFault
https://segmentfault.com/a/1190000000355928
3、Composer 中文网
http://www.phpcomposer.com/
4、Packagist / Composer 中国全量镜像
http://pkg.phpcomposer.com/
5、Composer安装
https://getcomposer.org/download/
6、composer之创建自己的包 - 始终不够
http://www.huyanping.cn/composer%e4%b9%8b%e5%88%9b%e5%bb%ba%e8%87%aa%e5%b7%b1%e7%9a%84%e5%8c%85/
7、php - 请各位分享或推荐一下composer里面好用的包 - SegmentFault
https://segmentfault.com/q/1010000000484379
8、给 CI 插上翅膀——在 CodeIgniter 2 中使用 Laravel Eloquent ORM - 岁寒
https://lvwenhan.com/php/414.html
9、Composer进阶使用 —— 常用命令和版本约束 - icyfire - SegmentFault
https://segmentfault.com/a/1190000005898222