composer原理
composer主要基于spl_autoload_register。
在執行了“composer install”后,composer先將在https://packagist.org/上依賴的包下載到vendor目錄中,然后將所有依賴包的枚舉寫到vendor/composer/autoload_static.php中,再通過spl_autoload_register注冊到SPL __autoload函數棧中即可。
composer.json添加模塊
我們需要在 composer.json 文件中指定 require key 的值,以明確你的項目需要依賴哪些包。
- composer.json的最小demo
{
"require": {
"monolog/monolog": "1.0.*"
}
}
-
示例工程
- 加入對本工程其他目錄下所有class的依賴
對ezSQL的依賴,則需要添加如下:
"name": "marsthink",
"description": "PHP class to make interacting with a database ridiculusly easy.",
"license": "LGPL",
"authors": [
{
"name": "Jamal Jo",
"email": "woshizmxin@163.com"
}
],
"autoload": {
"classmap": [
"ezSQL/"
]
}
}
- 加入對https://packagist.org/ 上的包的依賴
對monolog和jpush的依賴,修改如下:
{
"name": "marsthink",
"description": "PHP class to make interacting with a database ridiculusly easy.",
"license": "LGPL",
"authors": [
{
"name": "Jamal Jo",
"email": "woshizmxin@163.com"
}
],
"require": {
"monolog/monolog": "1.0.*",
"jpush/jpush": "v3.5.*"
},
"autoload": {
"classmap": [
"ezSQL/"
]
}
}
引用composer.json的庫
根據composer.json,Composer 生成了一個 vendor/autoload.php 文件。你可以簡單的引入這個文件:
require 'vendor/autoload.php';
這使得你可以很容易的使用第三方代碼。例如:如果你的項目依賴 monolog,你就可以像這樣開始使用這個類庫,并且他們將被自動加載。
// index.php
require 'vendor/autoload.php';
$log = new Monolog\Logger('name');
$log->pushHandler(new Monolog\Handler\StreamHandler('app.log', Monolog\Logger::WARNING));
$log->addWarning('Foo');
composer.lock - 鎖文件
請提交你應用程序的 composer.lock (包括 composer.json)到你的版本庫中
在安裝依賴后,Composer 將把安裝時確切的版本號列表寫入 composer.lock 文件。這將鎖定改項目的特定版本。install 命令將會檢查鎖文件是否存在,如果存在,它將下載指定的版本(忽略 composer.json 文件中的定義)。如果不存在,Composer 將讀取 composer.json 并創建鎖文件。
這意味著,任何人建立項目都將下載與指定版本完全相同的依賴。你的持續集成服務器、生產環境、你團隊中的其他開發人員、每件事、每個人都使用相同的依賴,從而減輕潛在的錯誤對部署的影響。即使你獨自開發項目,在六個月內重新安裝項目時,你也可以放心的繼續工作,即使從那時起你的依賴已經發布了許多新的版本。
修改鏡像源
運行composer install時,有時候卡在Loading composer repositories with package information,此時需要更換鏡像源頭,方法如下:
- 方法一:修改 composer 的全局配置文件(推薦方式)
打開命令行窗口(windows用戶)或控制臺(Linux、Mac 用戶)并執行如下命令:
composer config -g repo.packagist composer https://packagist.phpcomposer.com
- 方法二:修改當前項目的 composer.json
配置文件:
打開命令行窗口(windows用戶)或控制臺(Linux、Mac 用戶),進入你的項目的根目錄(也就是 composer.json文件所在目錄),執行如下命令:
composer config repo.packagist composer https://packagist.phpcomposer.com
上述命令將會在當前項目中的 composer.json文件的末尾自動添加鏡像的配置信息(你也可以自己手工添加)
注意:
- 根據經驗,每次部署代碼時,由于工程內的依賴關系變化,建議先刪除composer.lock,再運行composer install。