下面由composer教學欄位來介紹用Composer管理依賴性,希望對需要的朋友有幫助!
composer原本是Symfony這個PHP Framework中,設計來管理套件依賴的工具,因為簡單又好用,現在已經成為一個獨立的開放原始碼計畫。許多Framework以及程式庫,現在都可以使用composer來安裝管理。
其實在PHP上,很早就有這類的套件依賴管理工具,也就是PEAR。不過PEAR的設定過於繁複,也很難針對個別專案設定各自的依賴性,所以現在Composer受到大眾的喜愛。
這個簡介只針對使用者,所以不會對於套件開發者需要知道的部份著墨。
* 安裝
如果是Windows的使用者,只需要下載安裝檔並且執行安裝:
https://getcomposer.org/Composer-Setup.exe
如果要手動安裝,可以參考官網的指引:
http://getcomposer.org/doc/00-intro.md#installation-windows
如果是UNIX Like系統的使用者,可以透過這樣的指令來安裝:(需要先安裝curl)
curl -sS https://getcomposer.org/installer | php
安裝程式會檢查PHP的設定,然後下載composer.phar到目前的目錄。要執行composer的話,可以執行
php composer.phar
或是乾脆把它改成執行檔
>mv composer.phar composer >chmod +x composer
然後執行./composer。
不過如果再不同的工作目錄中都需要的話,而且執行權限也沒問題,也可以直接把檔案複製到/usr/local/bin。
* 設定依賴關係
在專案中使用composer時,首先要產生一個composer.json檔,裡面指定要使用的套件與版本。例如需要用phpmailer來寄信時,可以這樣指定:
{ "require": { "phpmailer/phpmailer": "~5.2.7" } }
然後執行安裝:
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
根據目錄中的檔案可以發現,本來只有composer.json檔案,安裝之後多了一個composer.lock檔案以及vendor目錄。先來看看composer.lock的內容:
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。寫一個簡單的程式測試一下:
<?php require 'vendor/autoload.php'; $phpmailer = new PHPMailer;
執行以後沒有出錯,表示phpmailer可以正常載入...接下來就看一下這幾個檔案的用途。
* composer.json
對使用者來說,這個檔案主要是用來維護依賴關係。只要在檔案中的"require"屬性中加入一個物件,屬性名稱是套件名稱,值就是版本。套件名稱分成兩個部分,第一個部分是vendor,第二個部分才是實際套件名稱,使用"\"隔開。版本有幾種規則:
直接指定版號,例如2.7.3
#指定主版號之後,使用"*"指定次版號,例如2.7.*表示版號大於等於2.7.0,小於2.8.0的版本
使用>、>=、!=、51e2b9ef874b71cd8b64fe8bd8dfeb02/acab04e509e5b64e7e2bc0d60ab53414的目录结构来组织。
* vendor/autoload.php
只要引用这个档案,就可以载入套件中所有对外公开的类别。基本上每个套件都会定义自己的autoload规则,在安装时,composer会把这些规则加入,这样透过autoload.php就可以直接使用所有已安装的类别。
=====
从这些地方可以看到,Composer这个套件管理工具,在设计上已经做了很周密的考量,只需要简单指定要使用的套件及版本,一个指令就可以安装完毕,引用一个胆案之后就能使用,这样真的非常方便。所以目前几乎所有的程式库以及Framework,应该都逐渐在套用这个工具了。未来在开发PHP程式,恐怕最基本的工具也就是composer。
以上是教你用Composer管理依賴性的詳細內容。更多資訊請關注PHP中文網其他相關文章!