PHP中composer的安裝和使用
是什麼
如果你知道yum
、apt-get
、npm
、bower
等命令中的一種或者多種,那麼,你也能很快知道composer
是什麼了。沒錯,它就是PHP裡快速安裝類庫的。平時,我們安裝一個PHP類庫,需要搜尋->下載
;使用composer
,我們只要知道包名,直接composer
insatll
就可以了。
PHP 語言本身就帶有強大的網路功能、檔案管理功能和豐富的系統 API,Composer 也只是一段 PHP 指令碼而已。
是 PHP 用來管理依賴(dependency)關係的工具。你可以在自己的專案中宣告所依賴的外部工具庫(libraries),Composer 會幫你安裝這些依賴的庫檔案。
作用
安裝PHP包、依賴庫。
示例:
$ composer require monolog/monolog
這是在安裝monolog
庫。
$ composer create-project laravel/laravel learnlaravel5 5.0.22
這是在安裝laravel
框架並建立專案。
YII
框架也是通過composer
安裝的。
為什麼用composer
通過過composer
,我們可以使用大量的第三方庫,而無需自己造輪子。優秀專案示例:
- overtrue/wechat 讓微信開發更簡單!
- catfan/medoo 一款ORM框架
- monolog/monolog 日誌記錄
- hprose/hprose RPC框架
你可以在 https://packagist.org/ 找到你需要的庫。甚至你可以提交自己寫的優秀的庫到該平臺裡供大家使用。
如果不會composer
,流行的laravel
、yii
框架安裝都成為問題,更不用談學習了;很多優秀的輪子你無法使用。所以,推薦phper必須學會composer。
安裝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,建議下載最新版本的:
(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.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
生成一個空的Composer專案
在合適的地方新建一個資料夾,命名為 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
即可。
命令彙總
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後,使用時,卻發現不能下載包,或者很慢,這是一個『眾所周知』的原因。
所以,我們使用國內的映象站點進行代替,常用方法有兩種:
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"
}
]
}
推薦的包
overtrue/wechat 讓微信開發更簡單!
catfan/medoo
psr/log
symfony/event-dispatcher
phpunit/phpunit
phpunit/php-timer
michelf/php-markdown markdown 文件解析
intervention/image 圖片處理
mytharcher/alipay-php-sdk
釋出自己的包
大概步驟如下:
在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": "[email protected]"
}
],
"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 非官方規範:
- PSR-0 (Autoloading Standard) 自動載入標準
- PSR-1 (Basic Coding Standard) 基礎編碼標準
- PSR-2 (Coding Style Guide) 編碼風格嚮導
- PSR-3 (Logger Interface) 日誌介面
- PSR-4 (Improved Autoloading) 自動載入優化標準
之後,在此標準之上,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 協作就會變的非常簡單。
常見問題
1、Windows下出現:Fxp\Composer\AssetPlugin\Repository\NpmRepository does not exist
進入C:\Users\YJC\AppData\Roaming\Composer目錄,刪除vendor目錄。