在項目中使用composer.json
在項目中使用composer,你須要有一個composer.json文件,此文件的做用主要用來聲明包之間的相互關係和其餘的一些元素標籤。
require 關鍵字
第一件事情在composer.json就是使用require關鍵字了,你將告訴composer哪些包是你項目所須要的
{
"require": {
"monolog/monolog": "1.0.*"
}
}
如你所見,require的對象將會映射包的名稱( monolog/monolog)和包的版本是1.0.*
包的命名
基本上包的命名是 主名/項目名稱( monolog/monolog),主名必須惟一,可是項目也就是咱們的包的名稱能夠有相同的,例如: igorw/json,和seldaek/json
包的版本
咱們須要使用monolog的版本是1.0.*,他的意思是隻要版本是1.0分支便可,例如1.0.0,1.0.2或者1.0.99
版本定義的兩種方式:
標準的版本:定義保準的版本包文件,如:1.0.2
必定範圍的版本:使用比較符號來定義有效的版本的範圍,有效的符號有>, >=, <,<=, !=
通配符:特別的匹配符號*,例如1.0.*就至關於>=1.0,<1.1版本的便可
下一個重要的版本:~符號最好的解釋就是,~1.2就至關於>1.2,<2.0,但~1.2.3就至關於>=1.2.3,<1.3版本。
安裝包
在項目文件路徑下運行
$ composer install
這樣子他會自動下載monolog/monolog文件到你的vendor目錄下面。
接下來須要說明一件事情就是
composer.lock - 鎖定文件
在安裝完全部須要的包以後,composer會生成一張標準的包版本的文件在composer.lock文件中。這將鎖定全部包的版本。
使用composer.lock(固然是和composer.json一塊兒)來控制你的項目的版本
這一點很是的重要,咱們使用install命令來處理的時候,它首先會判斷composer.lock文件是否存在,若是存在,將會下載相對應的版本(不會在於composer.json裏面的配置),這意味着任何下載項目的人都將會獲得同樣的版本。
若是不存在composer.lock,composer將會經過composer.json來讀取須要的包和相對的版本,而後建立composer.lock文件
這樣子就能夠在你的包有新的版本以後,你不會自動更新了,升級到新的版本,使用update命令便可,這樣子就能獲取最新版本的包而且也更新了你的composer.lock文件。
$ php composer.phar update
或者
$ composer update
Packagist(這應該就是composer,感受有點像python的包,雖然沒那麼強大,呵呵,有了這種標準之後,之後你們開發網站絕對會很輕鬆,能夠借鑑不少人的代碼了,而且更加方便了!)
Packagist是composer的主要倉庫,你們能夠去看看,composer倉庫的基礎是包的源碼,你能夠隨意的獲取,Packagist的目的建成一個任何人均可以使用的倉庫,這就意味着在你的文件中任意的require包了。
關於自動加載
爲了方便的加載包文件,Composer自動生成了一個文件 vendor/autoload.php,你能夠方便只有的使用它在任何你須要使用的地方
require 'vendor/autoload.php';
這意味着你能夠很是很是方便的使用第三方代碼了,假設你的項目須要使用monlog,你直接使用吧,他們都已經自動加載了的!
$log = new Monolog\Logger('name');
$log->pushHandler(new Monolog\Handler\StreamHandler('app.log', Monolog\Logger::WARNING));
$log->addWarning('Foo');
固然你也能夠在composer.json中加載本身的代碼:
{
"autoload": {
"psr-0": {"Acme": "src/"}
}
}
composer將會把psr-0註冊爲Acme的命名空間
你能夠定義一個映射經過命名空間到文件目錄,src目錄是你的根目錄,vendor是同一級別的目錄,例如一個文件爲:src/Acme/Foo.php就包含了Acme\Foo類
當你在增長autoload以後,你必需要從新install來生成vendor/autoload.php文件
在咱們引用此文件的時候,將會返回一個autoloader類的實力,因此你能夠把返回的值放入一個變量,而後在增長更多的命名空間,若是在開發環境下這是很是方便的,例如:
$loader = require 'vendor/autoload.php';
$loader->add('Acme\Test', __DIR__);php