[轉]Composer使用

是什么

如果你知道yum、apt-get、npm、bower等命令中的一種或者多種,那么,你也能很快知道composer是什么了。沒錯,它就是PHP里快速安裝類庫的。平時,我們安裝一個PHP類庫,需要搜索->下載;使用composer,我們只要知道包名,直接composer insatll就可以了。

PHP 語言本身就帶有強大的網絡功能、文件管理功能和豐富的系統 API,Composer 也只是一段 PHP 腳本而已。

引自Composer中文網的描述:

是 PHP 用來管理依賴(dependency)關系的工具。你可以在自己的項目中聲明所依賴的外部工具庫(libraries),Composer 會幫你安裝這些依賴的庫文件。

作用

安裝PHP包、依賴庫。

示例:

$ composerrequiremonolog/monolog

這是在安裝monolog庫。

$ composercreate-projectlaravel/laravel learnlaravel55.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.phpphp -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.phpphp -r "unlink('composer-setup.php');"

按順序執行即可。安裝好后提示:

All settings correctforusing ComposerDownloading...Composer successfully installedto:/root/composer/composer.pharUseit: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安裝位置里,然后新建:

composer.bat#windows用composer#Linux用

composer.bat

@ECHO OFFphp"%~dp0composer.phar"%*

composer

#!/bin/shdir=$(d=$(dirname"$0");cd"$d"&&pwd)# see if we are running in cygwin by checking for cygpath programifcommand-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[[ $(whichphp) == /cygdrive/* ]];thendir=$(cygpath -m$dir);fifidir=$(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:52Usage:? 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 debugAvailable commands:? about? ? ? ? ? Short information about Composer? archiveCreateanarchiveofthis composerpackagebrowse? ? ? ? ? Opens thepackage's repository URL or homepage in your browser.

clear-cache? ? Clears composer's internalpackagecache.? 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 repositoryURLorhomepageinyour browser.? infoShowinformation about packages? init? ? ? ? ? ? Creates a basic composer.jsonfileincurrentdirectory.installInstalls theprojectdependenciesfromthe composer.lockfileifpresent,orfalls backonthe composer.json.? licensesShowinformation about licensesofdependencieslistLists commands? outdated? ? ? ? Shows alistofinstalled packages that have updates available,includingtheir latestversion.? prohibits? ? ? Shows which packages prevent the givenpackagefrombeing installed? remove? ? ? ? ? Removes apackagefromthe requireorrequire-dev? require? ? ? ? Addsrequiredpackagestoyour composer.jsonandinstalls them? run-script? ? ? Run the scripts definedincomposer.json.searchSearchforpackagesself-updateUpdates composer.phartothe latestversion.? selfupdate? ? ? Updates composer.phartothe latestversion.showShowinformation about packagesstatusShowalistoflocally modified packages? suggestsShowpackagesuggestionsupdateUpdates your dependenciestothe latestversionaccordingtocomposer.json,andupdates the composer.lockfile.validateValidates a composer.jsonandcomposer.lockwhy? ? ? ? ? ? Shows which packages cause the givenpackagetobe installed? why-notShows which packages prevent the givenpackagefrombeing installed

生成一個空的Composer項目

在合適的地方新建一個文件夾,命名為 MFFC(My First Framework based on Composer),在文件夾下新建文件composer.json:

{? "require": {? }}

命令行切換到 MFFC 目錄下,運行:

composerupdate

就會在該目錄下生成一個vendor文件夾。以后所有的第三擴展包都會安裝在這里。

里面的代碼大家可以看看。

安裝擴展包

以下以monolog為例:

聲明依賴

在項目目錄下創建一個composer.json文件,指明依賴,比如,你的項目依賴 monolog:

{? ? "require": {? ? ? ? "monolog/monolog":"1.2.*"}}

如果不需要使用https,可以這么寫,以解決有時候因為https造成的問題:

{? ? "require": {? ? ? ? "monolog/monolog":"1.2.*"},? ? "config": {? ? ? ? "secure-http":false}}

安裝依賴

安裝依賴非常簡單,只需在項目目錄下運行:

composerinstall

如果沒有全局安裝的話,則運行:

phpcomposer.pharinstall

更新全部的包(謹慎使用):

composerupdate

注意:使用composer install或者composer update命令將會更新所有的擴展包,項目中使用需謹慎?。?!

若只安裝指定的包推薦在命令行使用:

composerrequiremonolog/monolog

進行安裝。

如果需要指定版本:

composerrequire"monolog/monolog:1.2.*"

更新某個包:

composerupdate monolog/monolog

移除某個包:

composerremovemonolog/monolog

如果手動更新了composer.json需要更新autoload:

composerdump-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文件(就不勞我們自己費力創建啦),會要求輸入一些信息來描述我們當前的項目,還會要求輸入依賴包composerinstall讀取composer.json內容,解析依賴關系,安裝依賴包到vendor目錄下composerupdate更新最新的依賴關系到compsoer.lock文件,解析最新的依賴關系并且寫入composer.lock文件composersearchpackagename 搜索包,packagename替換為你想查找的包名稱composer require packagename 添加對packagename的依賴,packagename可修改為你想要的包名稱composershowpackagenamecomposerself-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 composerhttps://packagist.phpcomposer.com

2、修改當前配置:即項目當前的composer.json文件;

{? "require": {? ? "noahbuscher/macaw":"dev-master"},? "repositories": [? ? ? ? {? ? ? ? ? ? ? "packagist":false},? ? ? ? ? {? ? ? ? ? ? ? "type":"composer",? ? ? ? ? ? "url":"http://packagist.cn"}? ? ? ]}

3、常見鏡像地址:

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 非官方規范:

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目錄。

有用的資源

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


原文地址

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容