1. 程式人生 > >PHP的包依賴管理工具Composer

PHP的包依賴管理工具Composer

Composer是一個基於專案的依賴管理器,負責將PHP專案所依賴的包或庫安裝到專案所在的目錄中,預設它不會安裝任何資料到全域性。它用於取代之前所使用的pear工具。

1 安裝Composer
[plain] view plaincopyprint?在CODE上檢視程式碼片派生到我的程式碼片
  1. curl -sS https://getcomposer.org/installer | php  
  2. mv composer.phar /usr/local/bin/composer  

2 簡單應用
我們只需要宣告一個專案所依賴的包或庫即可,此後其他的事情就由Composer來處理了。因此使用Composer最重要的就是在專案目錄中編寫composer.json配置檔案。例如你有一個專案,需要依賴monolog,可以這樣寫composer.json檔案:

{
    "require": 
    {
        "monolog/monolog": "1.2.*"
    }
}
有了此檔案後,在專案目錄中執行composer install,即會在專案目錄的vendor/目錄下建立其所依賴的庫。
另一方面,包含了composer.json的目錄,也可以釋出出去,讓其他人通過composer進行安裝。只需要在packagelist網站,把此包傳上去即可。

3 配置檔案說明

Composer使用json作為其配置檔案的格式。在工程的根目錄下composer.json所定義的包稱為root包。在配置檔案中有如下的屬性。

3.1 require
格式為: "require":{"vendor-name/package-name":"version", ...}

名字部分會作為vendor下的路徑進行建立
版本支援精確的版本號,也支援範圍如>=1.0; >=1.0,<2.0; ","作為邏輯與,而"!"作為邏輯或的意思。示例中使用了萬用字元*
版本也支援tag或branch名稱。
類似的有require-dev,前者用於宣告專案釋出版本的依賴包,後者用於宣告專案開發或測試中依賴的包。

3.2 autoload

composer支援PSR-0,PSR-4,classmap及files包含以支援檔案自動載入。PSR-4為推薦方式。

3.2.1 Files型別
格式:"autoload":{"files":["path/to/1.php","path/to/2.php",...]}

支援將陣列中的檔案進行自動載入,檔案的路徑相對於專案的根目錄。缺點是麻煩,需要將所有檔案都寫進配置。

3.2.2 classmap型別
格式:"autoload":{"classmap": ["path/to/src1","path/to/src2",...]}
支援將陣列中的路徑下的檔案進行自動載入。其很方便,但缺點是一旦增加了新檔案,需要執行dump-autoload命令重新生成對映檔案vendor/composer/autoload_classmap.php。

3.2.3 psr-0型別
格式:"autoload":{"psr-0":{
                            "name1\\space\\":["path/",...],
                            "name2\\space\\":["path2/",...],
                          }
                 }
支援將名稱空間對映到路徑。名稱空間結尾的\\不可省略。當執行install或update時,載入資訊會寫入vendor/composer/autoload_namespace.php檔案。如果希望解析指定路徑下的所有名稱空間,則將名稱空間置為空串即可。
需要注意的是對應name2\space\Foo類的類檔案的路徑為path2/name2/space/Foo.php

3.2.4 psr-4型別
格式:"autoload":{"psr-4":{
                            "name1\\space\\":["path/",...],
                            "name2\\space\\":["path2/",...],
                          }
                 }
支援將名稱空間對映到路徑。名稱空間結尾的\\不可省略。當執行install或update時,載入資訊會寫入vendor/composer/autoload_psr4.php檔案。如果希望解析指定路徑下的所有名稱空間,則將名稱空間置為空串即可。
需要注意的是對應name2\space\Foo類的類檔案的路徑為path2/space/Foo.php,name2不出現在路徑中。

PSR-4和PSR-0最大的區別是對下劃線(underscore)的定義不同。PSR-4中,在類名中使用下劃線沒有任何特殊含義。而PSR-0則規定類名中的下劃線_會被轉化成目錄分隔符。

3.3 name
格式:"name":"vendor/package"
如果要釋出一個包,你需要指定包的名字資訊。

3.4 version
格式:"version":"1.0.2"
如果要釋出一個包,你需要指定包的版本號。版本號的格式為X.Y.Z或vX.Y.Z,其後可以加字尾如-dev,-patch,-alpha,-beta或-RC。除dev外,尾上還可加一個數字,如1.0.0-alpha3。

3.5 description
格式:"description":"your own description at here!"
如果要釋出一個包,可以指定一個簡短的介紹

3.5 type
格式:"type":"library"
說明包的型別,支援如下library,project,metapackage,composer-plugin,預設為library

3.6 keywords
格式:"keywords":["logging","database","redis"]
一個數組的關鍵字,用於搜尋或過濾時使用。

3.7 homepage
可選的,說明專案的網站地址

3.8 time/license
說明專案的時間和License,時間格式為YY-MM-DD HH:MM:SS

3.9 authors
格式:"authors":[ 
                    {"name":"ss","email":"[email protected]","homepage":"","role":""},...
                ]
用於說明專案的作者資訊,為可選的。

3.10 support
格式:"support":{"emial":"","issues":"","forum":"","wiki":"","irc":"" }
用於說明專案的支援資訊

3.11 conflict
用於宣告與本包有衝突的包的版本,使用類似於require。

3.12 replace
用於宣告需要替換的包,使用類似於require

3.13 provided
用於說明本包實現了某個包的介面

3.14 suggest
格式:"suggest":{"vendor/package":"Some description!"}
用於說明可選的,用於增強功能的包及說明。

4 命令列工具
有了配置檔案後,便可以使用composer命令來執行,有如下命令
init                 進入互動式嚮導,在當前目錄下生成composer.json檔案
install           根據配置進行安裝
    選項 --prefer-source
             --prefer-dist
             --dry-run
             --dev/--no-dev
             -o  將psr0/4轉換為classmap以提升效能
update [package-name ...] 根據配置升級指定的包
search [pattern]                    從packagelist中搜索包
show   [package-name]      顯示包的資訊
depends package               分析專案中包的依賴
validate                                  驗證配置檔案內容
status                                    檢查程式碼是修改資訊
self-update                          升級composer本身
config                                    配置composer本地或全域性選項,可以--list顯示所有可配置項   格式為conifg [option] [key] [value...]
create-project vendor/package path version 在指定路徑下下載一個專案,預設從packagelist上搜索
dump-autoload                   當類對映中加入新類時,用於更新載入器

5 自動載入

對於composer管理的依賴,如果希望自動載入只需要在檔案中加入:require 'vendor/autoload.php'
拿上面的例子,使用依賴的類就十分簡單了,使用packet-name\class-name就可以直接訪問了。如
$log = new Monolog\Logger();

6 雜項

composer.lock檔案用於記錄各依賴的版本,如果使用了VCS,即此檔案也需要進行提交。因為如果此檔案存在,即composer會按照此檔案中的版本進行下載,會忽略composer.json檔案。如果需要更新版本,則需要修改composer.json,並執行update命令,此時會下載新版本,並更新composer.lock檔案。

對於國內composer install/update 非常慢的情況,如該電腦安裝有goagent,可以設定用goagent作為代理,linux系統下可以設定環境變數 export HTTP_PROXY=http://127.0.0.1:8087

相關推薦

PHP依賴管理工具Composer簡介

Composer是一個基於專案的依賴管理器,負責將PHP專案所依賴的包或庫安裝到專案所在的目錄中,預設它不會安裝任何資料到全域性。它用於取代之前所使用的pear工具。1 安裝Composercurl -sS https://getcomposer.org/installer

PHP依賴管理工具Composer

Composer是一個基於專案的依賴管理器,負責將PHP專案所依賴的包或庫安裝到專案所在的目錄中,預設它不會安裝任何資料到全域性。它用於取代之前所使用的pear工具。1 安裝Composer [plain] view plaincopyprint? curl 

PHP依賴管理工具Composer介紹和使用

PHP的依賴管理工具Composer介紹官方文檔:http://docs.phpcomposer.com/00-intro.html#System-Requirements linx上安裝:下載 Composer 的可執行文件 局部安裝要真正獲取 Composer,我們需要做兩件事。首先安裝 Composer

有用PHP依賴管理工具Composer新手教程

pro 介紹 簡單 優先 .com auto aries via 日誌記錄 PHP依賴管理工具Composer新手教程 Composer 是 PHP 的一個依賴管理工具。它同意你申明項目所依賴的代碼庫,它會在你的項目中為你安裝他們。 依賴管理 Compos

ubuntu上使用PHP依賴管理工具Composer(二)——自動載入

結合phpstorm使用Composer命令列 初始化Composer 在phpstorm中建立新的專案test tools->run command(Ctrl+Shift+X)開啟命令

PHP三方管理工具-composer

Composer安裝 下載安裝composer(終端命令) ~$ curl -sS https://getcomposer.org/installer | php 或 ~$ php -r "readfile('https://getcompose

Golang官方依賴管理工具:dep

go golag dep 在這裏聲明一下,百度或者google看到的godep不是我這篇博文說的dep,那它們是什麽關系呢?按照Peter Bourgon博文來說,它們的作者都有相同的人,但是一個是dep是官方版本,godep是第三方工具。我今天介紹的是dep,之前也有介紹過glide,有興趣的可

yarn依賴管理工具的使用

glob rem 依賴 info uninstall 依賴管理 style all face Yarn是Facebook發布的一款依賴管理工具,它比npm更快、更高效。 與NPM命令對照 npm install => yarn install npm insta

Go 依賴管理工具 Dep 的安裝及配置

文章目錄 1、背景介紹 2、環境、軟體準備 3、Dep 安裝 3.1、MacOS 系統 3.2、Linux 等其他系統 3.3、go get 安裝方式 4、Dep 配置檔案說明

Golang Gin 專案依賴管理 godep 使用

Golang Gin 專案包依賴管理 godep 使用 標籤(空格分隔): Go 在按照github.com/tools/godep文件go get完包以後,調整專案結構為$GOPATH/src/$PROJECT_NAME/,同時使專案編譯沒有問題。執行godep save命令,出現了一系列包缺失的問

Pipenv:新一代Python專案環境與依賴管理工具

什麼是Pipenv Pipenv是Kenneth Reitz在2017年1月釋出的Python依賴管理工具,現在由PyPA維護。你可以把它看做是pip和virtualenv的組合體,而它基於的Pipfile則用來替代舊的依賴記錄方式(requirements.txt)。 在這篇文章裡,我將會

第四十一章:Maven自動化構建依賴管理工具

1Maven簡介 Maven是一款自動化“構建”和“依賴”管理的工具。 2提出問題 2.1jar包管理問題 jar包從哪來的? 官網下載 CSND…… 51CTO…… …… jar包之間存在依賴關係 A jar包中用到了B jar包中的類,就說A依賴B。jar包之間普遍存在的依

筆記之元件化開發和元件管理工具composer

(1)元件化開發 一個元件可以釋出供別人使用,也可以使用別人釋出的元件快速構建專案,更換元件而不需修改系統其他部分的程式碼。 laravel底層使用了很多symfony框架的元件。 (2)如何實現元件化開發 composer,元件管理工具 (3)composer compos

使用CocoaPods來做iOS程式的依賴管理

前言 每種語言發展到一個階段,就會出現相應的依賴管理工具, 或者是中央程式碼倉庫。比如 Java: maven,IvyRuby: gemsPython: pip, easy_installNodejs: npm隨著iOS開發者的增多,業界也出現了為iOS程式提供依賴管理的工具,這個工具叫:CocoaPo

iOS 依賴管理工具 CocoaPods 和 Carthage 的使用及原理

       隨著網際網路的高速發展,個大網際網路公司為更高效研發自己的產品,而不斷研發適合自己的平臺的開發語言。當這些新的語言被廣泛推廣、被更多的開發團隊所接納,被用於開發不同的場景,這個過程中會研發出很多很多方便開發的框架。發展到一定階段,都會出現相應的依賴管理工具。例如

GO語言依賴管理工具govendor的使用

# View your work. govendor list # Look at what is using a package govendor list -v fmt # Specify a specific version or revision to fetch govendor fetch g

Golang的依賴管理 (package dependency manager)

 Golang 的開發者對GOPATH都不陌生, 它是進行go 專案開發的’workspace’。 go專案的原始碼,可執行檔案,以及依賴庫的存放都是通過gopath的相關目錄結構進行組織的,而且go原生的依賴管理也是使用GOPATH進行組織。 如當前專案中import “

【ios開發學習】Cocoa 新的依賴管理工具:Carthage

說到 iOS 的依賴管理工具,大家一定首先想到的是 CocoaPods ,不錯,CocoaPods 確實是一個很好依賴管理工具,已然成為了 Cocoa 依賴管理的標準,豐富的支援庫、文件等等,CocoaPods 相關的文章有很多,這裡就不一一贅述了。 今天要介紹的是一款新的依賴管理工具,名曰 “Cart

ios依賴管理工具Carthage 簡介

Carthage 簡介Carthage 類似於 CocoaPods,為使用者管理第三方框架和依賴,但不會自動修改專案檔案和生成配置Carthage 是去中心化的依賴管理工具,安裝依賴時不需要去中心倉庫獲取 CocoaPods 所有依賴的索引,節省時間對專案無侵入性,Carth

Node.js 第三方的安裝、升級、解除安裝,以及依賴管理

本地安裝: npm install package-name 全域性全裝: npm install -g  package-name 升級:  npm update  解除安裝:  npm uninstall  包依賴管理,通過package.json  例如: { "