Zi 字媒體
2017-07-25T20:27:27+00:00
Composer 介紹
Composer 是一套 PHP 的套件管理工具,是一支 Phar 的執行程式(Phar 會將程式打包成一隻執行檔)。
特點
針對專案安裝
支援版本控制系統當下載來源,例如 git or svn
設定檔使用 JSON格式(composer.json)
自動處理母套件與子套件的相依性(不符合時就不安裝)
所有的 package 都是透過 composer.json 控制,使用 Composer 時通常由 root-package 統一管理。
安裝
因應版本不同,實際內容可以直接參考 官網
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('SHA384', 'composer-setup.php') === '544e09ee996cdf60ece3804abc52599c22b1f40f4323403c44d44fdfdd586475ca9813a858088ffbc1f233e9b180f061') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"
安裝完以後的指令會是 composer.phar ,通常大家習慣用的還是 composer,因此在安裝時可以先透過指定好 filename 。
php composer-setup.php --filename=composer
基本操作
# init composer.json
composer init
# init 時順便加入套件(加入 -n 參數後,系統在 init 時不會有任何互動提問)
composer init --require=foo/bar:1.0.0 -n
# 加入新 vendor 進 composer.json,並且安裝
composer require "foo/bar:1.0.0"
# 查看指令及選項
composer list
# 升級Composer
composer self-update
# 更新套件
composer update
# 更新特定套件
composer update foo/bar
# 只更新lock檔
composer update --lock
# 查看已安裝的套件
composer show -i
Init 之後的 composer.json
{
"name": "johnsonlu/test",
"description": "This is a Composer Test",
"license": "proprietary",
"authors": [
{
"name": "JohnsonLu",
"email": "johnson4932@gmail.com"
}
],
"require": {
"php": ">=5.3.0"
}
}
基本設定說明:
名稱
功用
name
套件名稱,通常會是以 vendor/project 的方式命名。
minimum-stability
套件穩定度,分別有 stable、RC、beta、alpha、dev。
license
專案的 license,可以參考 SPDX 的 Identifier,私人專案可以使用 proprietary。
require
該專案要載入的套件
require-dev
該專案在載入的套件(開發模式)
專案應用
在專案中,套件管理都是透過專案根目錄的 composer.json 來控管,以裝 phpmailer 為例:
{
"require": {
"phpmailer/phpmailer": ">=5.2.7"
}
"require-dev": {
"phpunit/phpunit": ">=3.7.0"
}
}
版本選擇
版本的選擇方式有幾種:
1. 直接指定版號,例如 5.2.7
2. 使用 * 指定次版號,例如 5.2.* 表示版號大於等於 5.2.0,小於 5.3.0 的版本
3. 使用比較運算子,例如:>5.2、>=5.2、!=5.2、<=5.2、<5.2等
4. 使用 ~ 在版號前,表示下一個版號變動之前的版本。( ~1.2 等同於 >=1.2 和 <2.0.0)
5. 在版號之後,可以加上不同的 stability flag,例如 5.2.*@beta
安裝套件
Composer 預設安裝套件時,會去 packagist 搜尋,如果有想要 release 自己套件的記得上去註冊,這樣一來大家就可以自由使用你的套件了。
# 安裝 compoesr.json 中所有套件,包含 require-dev(test)
composer install
# 安裝 require(production)
composer install --no-dev
安裝完畢後會出現 composer.lock 檔案與 vendor 資料夾。
名稱
功用
_composer.lock_
紀錄載入套件的版本資訊
_vendor_
存放載入套件的 source 及自動生成的 autoload.php
開發時只要載入 composer 建立出來的 autoload 程式即可使用。
require "vendor/autoload.php";
new PHPMailer;
安裝其他來源的套件
安裝不在套件庫私有的 git 套件(VCS來源:git、svn)時, composer.json 中需要從 repositories 定義位置,可以透過 dev-branch 選擇載入哪一個 branch。
{
"require": {
"johnsonlu/test": "dev-master"
},
"repositories": [
{
"type": "vcs",
"url": "https://github.com/johnson4932/test"
}
]
}
另外,也可以直接用 dev-master#commit-hash 決定從哪一個 commit 開始載入。
Notice: 這裡有個前提,引用的套件必須有自己的 composer.json,這樣 composer 才有辦法辨別專案名稱。
利用 Autoload 載入內部元件
Composer 提供了 autoload 設定專案內部元件的載入,autoload 可以支援許多不同型態的載入方法。
Composer 會自動生成 vendor/autoload.php 載入外部套件,而外部套件的內部元件載入則是由該套件 compsoer.json 中的 autoload 決定。
Autoload 範例
{
"autoload": {
"psr-4": {
"POD\\Metadata\\": "src/"
},
"classmap": ["class.say.php"],
"files": ["function.php"]
}
}
單獨更新 Autoload
composer dump-autoload
安裝沒有 composer.json 的外部套件
如果需要安裝沒有使用 composer 的外部套件時,需要透過 package type 安裝,且須自行在 composer.json 設定載入路徑。
載入 zip 檔
{
"repositories": [
{
"type": "package",
"package": {
"name": "phpQuery/phpQuery",
"version": "0.9.5",
"dist": {
"url": "https://github.com/TobiaszCudnik/phpquery/archive/master.zip",
"type": "zip"
},
"autoload": {
"psr-0": {"phpQuery":"phpQuery/"}
}
}
}
],
"require": {
"phpQuery/phpQuery": "0.9.*"
}
}
載入 source
{
"repositories": [
{
"type": "package",
"package": {
"name": "JohnsonLu/xxaudio",
"version": "master",
"source": {
"url": "git@git.johnsonlu.org:xxaudio",
"type": "git",
"reference": "master"
},
"autoload": {
"psr-0": {
"XX_": "xxlibs-audio/"
}
}
}
}
],
"require": {
"JohnsonLu/xxaudio": "dev-master"
}
}
直接安裝專案
有些專案並非套件,且已經將 composer.json 的目錄結構定義好了,Composer 可以透過 create-project 建立並使用。( 例如 Laravel )
# --prefer-dist 等同加入 install 和 update
composer create-project laravel/laravel path --prefer-dist
Categories: PHP
Tags: ComposerPHP
分類
Android
AngularJS
Chrome
Database
MySQL
DataStructure
Editor
Vim
Firefox
Git
Hadoop
Language
Go
Java
JavaScript
jQuery
jQueryChart
Node.js
Vue
PHP
Laravel
ZendFramework
Python
Mac
Network
Cisco
DLink
Juniper
Oauth
Server
Apache
Share
Unix
FreeBSD
Linux
WebDesign
Bootstrap
CSS
HTML
Wordpress
Search
搜尋:
寫了
5860316篇文章,獲得
23313次喜歡