若是你知道yum
、apt-get
、npm
、bower
等命令中的一種或者多種,那麼,你也能很快知道composer
是什麼了。沒錯,它就是PHP裏快速安裝類庫的。平時,咱們安裝一個PHP類庫,須要搜索->下載
;使用composer
,咱們只要知道包名,直接composer insatll
就能夠了。php
PHP 語言自己就帶有強大的網絡功能、文件管理功能和豐富的系統 API,Composer 也只是一段 PHP 腳本而已。html
引自Composer中文網的描述:laravel
是 PHP 用來管理依賴(dependency)關係的工具。你能夠在本身的項目中聲明所依賴的外部工具庫(libraries),Composer 會幫你安裝這些依賴的庫文件。git
安裝PHP包、依賴庫。github
示例:npm
$ composer require monolog/monolog
這是在安裝monolog
庫。json
$ composer create-project laravel/laravel learnlaravel5 5.0.22
這是在安裝laravel
框架並建立項目。windows
YII
框架也是經過composer
安裝的。安全
經過過composer
,咱們可使用大量的第三方庫,而無需本身造輪子。優秀項目示例:bash
你能夠在 https://packagist.org/ 找到你須要的庫。甚至你能夠提交本身寫的優秀的庫到該平臺裏供你們使用。
若是不會composer
,流行的laravel
、yii
框架安裝都成爲問題,更不用談學習了;不少優秀的輪子你沒法使用。因此,推薦phper必須學會composer。
首先得安裝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
操做執行結束,會在當前目錄下生成composer.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" $*
若是上述連接下載不了,請使用: http://pan.baidu.com/s/1gfmSIbD 密碼: f4vr 。
我還專門建了github倉庫:https://github.com/52fhy/composer。
Linux須要給composer可執行權限。以後就可使用composer了:
$ composer ______ / ____/___ ____ ___ ____ ____ ________ _____ / / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/ / /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ / \____/\____/_/ /_/ /_/ .___/\____/____/\___/_/ /_/ Composer version 1.2.0 2016-07-19 01:28:52 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 Short information about Composer archive Create an archive of this composer package browse Opens the package's repository URL or homepage in your browser. clear-cache Clears composer's internal package cache. clearcache Clears composer's internal package cache. config Set config options create-project Create 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 Execute 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 Show 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 Show 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 Run the scripts defined in composer.json. search Search for packages self-update Updates composer.phar to the latest version. selfupdate Updates composer.phar to the latest version. show Show information about packages status Show a list of locally modified packages suggests Show package suggestions update Updates 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
在合適的地方新建一個文件夾,命名爲 MFFC(My First Framework based on Composer),在文件夾下新建文件 composer.json
:
{
"require": {
}
}
命令行切換到 MFFC 目錄下,運行:
composer update
就會在該目錄下生成一個vendor
文件夾。之後全部的第三擴展包都會安裝在這裏。
裏面的代碼你們能夠看看。
如下以monolog
爲例:
在項目目錄下建立一個composer.json
文件,指明依賴,好比,你的項目依賴 monolog:
{ "require": { "monolog/monolog": "1.2.*" } }
若是不須要使用https
,能夠這麼寫,以解決有時候由於https形成的問題:
{ "require": { "monolog/monolog": "1.2.*" }, "config": { "secure-http": false } }
安裝依賴很是簡單,只需在項目目錄下運行:
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.0.2
。
範圍:使用比較操做符你能夠指定包的範圍。這些操做符包括:>,>=,<,<=,!=。你能夠定義多個範圍,使用空格 或者逗號,表示邏輯上的與,使用雙豎線||表示邏輯上的或。其中與的優先級會大於或。示例:
>=1.0 >=1.0 <2.0 >=1.0 <1.1 || >=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
便可。
詳見:http://docs.phpcomposer.com/03-cli.html#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的倉庫,不少著名的PHP庫都能在其中找到。你也能夠提交你本身的做品。
當你安裝完Composer後,使用時,卻發現不能下載包,或者很慢,這是一個『衆所周知』的緣由。
因此,咱們使用國內的鏡像站點進行代替,經常使用方法有兩種:
一、修改全局配置:全局配置的文件通常放在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
二、修改當前配置:即項目當前的composer.json文件;
{ "require": { "noahbuscher/macaw": "dev-master" }, "repositories": [ { "packagist": false }, { "type": "composer", "url": "http://packagist.cn" } ] }
三、常見鏡像地址:
https://packagist.org 國外的
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
大概步驟以下:
在github上建立一個項目(項目名稱能夠隨意)
編寫composer.json
copy代碼文件並修改命名空間
在https://packagist.org/上遞交本身的包
設置github的hook
編寫composer.json
先看一個示例:
{ "name": "jenner/message_queue", "description": "php message queue wrapper", "license": "MIT", "keywords": ["message queue"], "version": "1.0.0", "authors": [ { "name": "Jenner", "email": "hypxm@qq.com" } ], "require": { "php": ">=5.3.0" }, "autoload": { "psr-0": { "Jenner\\Zebra\\MessageQueue": "src/" } } }
須要注意的幾個字段說明以下:
name:包名稱,遞交時packagist會檢測報名字是否合法。必須是一個/分隔的字符串。當別人引入你的包時,vendor下會自動建立這個目錄。例如org/package
包,則會在vender下建立org/package目錄。
autoload:包的加載方式,具體加載方式能夠參考composer中文網說明。這裏使用的是psr-0標準加載方式。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目錄。