下面由composer教程欄目給大家介紹用Composer管理相依性,希望對(duì)需要的朋友有所幫助!

composer原本是Symfony這個(gè)PHP Framework中,設(shè)計(jì)來管理套件相依性的工具,因?yàn)楹唵斡趾糜茫F(xiàn)在已經(jīng)成為一個(gè)獨(dú)立的開放原始碼計(jì)畫。許多Framework以及程式庫,現(xiàn)在都可以使用composer來安裝管理。
其實(shí)在PHP上,很早就有這類的套件相依性管理工具,也就是PEAR。不過PEAR的設(shè)定過于繁復(fù),也很難針對(duì)個(gè)別專案設(shè)定各自的相依性,所以現(xiàn)在Composer受到大眾的喜愛。
這個(gè)簡介只針對(duì)使用者,所以不會(huì)對(duì)于套件開發(fā)者需要知道的部份著墨。
* 安裝
如果是Windows的使用者,只需要下載安裝檔并且執(zhí)行安裝:
https://getcomposer.org/Composer-Setup.exe
如果要手動(dòng)安裝,可以參考官網(wǎng)的指引:
http://getcomposer.org/doc/00-intro.md#installation-windows
如果是UNIX Like系統(tǒng)的使用者,可以透過這樣的指令來安裝:(需要先安裝curl)
curl -sS https://getcomposer.org/installer | php
安裝程式會(huì)檢查PHP的設(shè)定,然后下載composer.phar到當(dāng)前的目錄。要執(zhí)行composer的話,可以執(zhí)行
php composer.phar
或是干脆把它改成執(zhí)行檔
>mv composer.phar composer >chmod +x composer
然后執(zhí)行./composer。
不過如果再不同的工作目錄中都需要的話,而且執(zhí)行權(quán)限也沒問題,也可以直接把檔案復(fù)制到/usr/local/bin。
* 設(shè)定相依性
在專案中使用composer時(shí),首先要產(chǎn)生一個(gè)composer.json檔,里面指定要使用的套件與版本。例如需要用phpmailer來寄信時(shí),可以這樣指定:
{
"require": {
"phpmailer/phpmailer": "~5.2.7"
}
}然后執(zhí)行安裝:
eng-Hsu-Pingteki-MacBook-Air:2-1a fillano$ composer install
Loading composer repositories with package information
Installing dependencies (including require-dev)
- Installing phpmailer/phpmailer (v5.2.7)
Downloading: 100%
Writing lock file
Generating autoload files
Feng-Hsu-Pingteki-MacBook-Air:2-1a fillano$這樣就安裝好了。看一看到底裝了什么:
Feng-Hsu-Pingteki-MacBook-Air:2-1a fillano$ ls -l total 16 -rw-r--r-- 1 fillano staff 66 10 11 18:15 composer.json -rw-r--r-- 1 fillano staff 2330 10 11 18:16 composer.lock drwxr-xr-x 5 fillano staff 170 10 11 18:16 vendor
根據(jù)目錄中的檔案可以發(fā)現(xiàn),本來只有composer.json檔案,安裝之后多了一個(gè)composer.lock檔案以及vendor目錄。先看一下composer.lock的內(nèi)容:
Feng-Hsu-Pingteki-MacBook-Air:2-1a fillano$ cat composer.lock
{
"_readme": [
"This file locks the dependencies of your project to a known state",
"Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file"
],
"hash": "065c23f92d5ae579cb91beff67f41196",
"packages": [
{
"name": "phpmailer/phpmailer",
"version": "v5.2.7",
"source": {
"type": "git",
"url": "https://github.com/PHPMailer/PHPMailer.git",
"reference": "8717a79565b2c0ed67f851d70e1949febdf3b226"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/8717a79565b2c0ed67f851d70e1949febdf3b226",
"reference": "8717a79565b2c0ed67f851d70e1949febdf3b226",
"shasum": ""
},
"require": {
"php": ">=5.0.0"
},
"require-dev": {
"phpdocumentor/phpdocumentor": "*",
"phpunit/phpunit": "*"
},
"type": "library",
"autoload": {
"classmap": [
"class.phpmailer.php",
"class.pop3.php",
"class.smtp.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"LGPL-2.1"
],
"authors": [
....下略看起來是剛剛安裝套件的資訊。
再看一下vendor目錄有什么東西:
Feng-Hsu-Pingteki-MacBook-Air:2-1a fillano$ tree vendor
vendor
├── autoload.php
├── composer
│ ├── ClassLoader.php
│ ├── autoload_classmap.php
│ ├── autoload_namespaces.php
│ ├── autoload_real.php
│ └── installed.json
└── phpmailer
└── phpmailer
├── LICENSE
├── PHPMailerAutoload.php
├── README.md
├── changelog.md
├── class.phpmailer.php
├── class.pop3.php
├── class.smtp.php
├── composer.json
├── docs
│ ├── Callback_function_notes.txt
│ ├── DomainKeys_notes.txt
│ ├── Note_for_SMTP_debugging.txt
│ ├── extending.html
│ ├── faq.html
│ ├── generatedocs.sh
│ └── pop3_article.txt
...下略看起來除了phpmailer目錄安裝了phpmailer在里面之外,主要還有autoload.php檔案以及composer目錄。
原來要載入透過composer安裝的套件,需要先引用vendor/autoload.php檔案,然后就可以使用phpmailer。寫一個(gè)簡單的程式測試一下:
<?php require 'vendor/autoload.php'; $phpmailer = new PHPMailer;
執(zhí)行以后沒有出錯(cuò),表示phpmailer可以正常載入...接下來就看一下這幾個(gè)檔案的用途。
* composer.json
對(duì)使用者來說,這個(gè)檔案主要是用來維護(hù)相依性。只要在檔案中的"require"屬性中加入一個(gè)物件,屬性名稱是套件名稱,值就是版本。套件名稱分成兩個(gè)部分,第一個(gè)部分是vendor,第二個(gè)部分才是實(shí)際套件名稱,使用"\\"隔開。版本有幾種規(guī)則:
直接指定版號(hào),例如2.7.3
指定主版號(hào)之后,使用"*"指定次版號(hào),例如2.7.*表示版號(hào)大于等于2.7.0,小于2.8.0的版本
使用>、>=、!=、<=、<等在版號(hào)前,表示使用這些比較運(yùn)算子來指定版號(hào)規(guī)則,可以使用多個(gè)規(guī)則并用","分開
使用"~"在版號(hào)前,表示下一個(gè)版號(hào)變動(dòng)之前的版本。例如~2.7,表示版本大于等于2.7,小于3.0
在版號(hào)之后,還可以加上不同的stability flag,例如2.7.*@beta。可以使用的flag有:dev、alpha、beta、RC、stable
指定好版本后,執(zhí)行composer install,就會(huì)根據(jù)指定的版本規(guī)則,安裝最新版本的套件。
實(shí)際上每個(gè)有composer.json檔案的目錄,也是一個(gè)套件的根目錄。不過如果是要做成給別人使用的套件,還需要加上許多設(shè)定,這些就不在討論范圍內(nèi)了。
* composer.lock
在首次安裝套件完畢后,會(huì)產(chǎn)生這個(gè)檔案,里面記錄了所安裝套件的資訊。這個(gè)檔案的真正作用是:如果目錄中有這個(gè)檔案,執(zhí)行安裝時(shí),就不會(huì)去搜尋更新的版本,而是依照這個(gè)檔案中記錄的版本來安裝。這個(gè)設(shè)計(jì)很重要,因?yàn)樾掳娴奶准苡锌赡芘c目前使用的版本不相容,如果不是使用同樣版本,很難保證系統(tǒng)的穩(wěn)定。過去在使用pear來管理套件時(shí),如果不注意,就有可能發(fā)生升級(jí)導(dǎo)致的慘劇。
除此之外,只要把這個(gè)檔案加入版本管理,所有開發(fā)者目錄中也都會(huì)有這個(gè)檔案,所以大家使用的套件版本也都會(huì)是一致的,這樣可以減少開發(fā)時(shí),使用套件版本不一導(dǎo)致的程式相容問題。
* vendor目錄
所有套件都會(huì)放置在這個(gè)目錄,并且依照<vendor name>/<package name>的目錄結(jié)構(gòu)來組織。
* vendor/autoload.php
只要引用這個(gè)檔案,就可以載入套件中所有對(duì)外公開的類別。基本上每個(gè)套件都會(huì)定義自己的autoload規(guī)則,在安裝時(shí),composer會(huì)把這些規(guī)則加入,這樣透過autoload.php就可以直接使用所有已安裝的類別。
=====
從這些地方可以看到,Composer這個(gè)套件管理工具,在設(shè)計(jì)上已經(jīng)做了很周密的考量,只需要簡單指定要使用的套件及版本,一個(gè)指令就可以安裝完畢,引用一個(gè)膽案之后就能使用,這樣真的非常方便。所以目前幾乎所有的程式庫以及Framework,應(yīng)該都逐漸在套用這個(gè)工具了。未來在開發(fā)PHP程式,恐怕最基本的工具也就是composer。
新聞名稱:教你用Composer管理相依性
文章URL:http://chinadenli.net/article48/cjidep.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、手機(jī)網(wǎng)站建設(shè)、云服務(wù)器、網(wǎng)站營銷、網(wǎng)站維護(hù)、軟件開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)