Composer教程之基礎用法

前言

   咱們已經安裝了Composer,那麼如何在咱們的項目中使用Composer呢?接下來的部分,我將對實際項目中如何使用Composer進行總結。php

composer.json

   要開始在你的項目中使用 Composer,你只須要一個composer.json文件。該文件包含了項目的依賴和其它的一些元數據。從該文件的後綴名能夠知道,這是一個JSON格式的文件。json

   下面經過一個最簡單的示例項目來講明如何使用Composer。項目代碼結構以下:服務器

project/
    ├── src/
    │  ├── a.class.php
    │  ├── b.class.php

   接下來,咱們要引入Composer。在項目的根目錄創建一個composer.json文件。代碼結構以下:app

project/
    ├── src/
    │  ├── a.class.php
    │  ├── b.class.php
    ├── composer.json

   好比咱們的項目如今須要依賴monolog/monolog這樣的一個包,那接下來,咱們就須要在composer.json中寫入如下內容:composer

 {
    "require": {
        "monolog/monolog": "1.0.*"
    }
 }

   能夠看到,require須要一個包名稱(例如monolog/monolog)映射到包版本(例如:1.0.*)的對象。而這裏最重要的兩個概念就是包名稱和包版本。工具

    • 包名稱
      包名稱由供應商名稱和其項目名稱構成。一般容易產生相同的項目名稱,而供應商名稱的存在則很好的解決了命名衝突的問題。它容許兩個不一樣的人建立一樣名爲json的庫,而以後它們將被命名爲igorw/jsonseldaek/json。 
    • 包版本
      包版本的門道就多了。好比在前面的例子中,咱們引入的monolog版本指定爲1.0.*。這表示任何從1.0開始的開發分支,它將會匹配1.0.01.0.2或者1.0.20
      版本約束能夠用幾個不一樣的方法來指定。ui

  • 使用方式 示例 描述
    確切的版本號 1.0.2 能夠指定包的確切版本
    範圍 >=1.0 >=1.0,<2.0 >=1.0,<1.1&#124;>=1.2 經過使用比較操做符能夠指定有效的版本範圍。有效的運算符:>>=<<=!=。咱們能夠定義多個範圍,用逗號隔開,這將被視爲一個邏輯AND處理。一個管道符號|將做爲邏輯OR處理。AND的優先級高於OR。
    通配符 1.0.* 咱們能夠使用通配符*來指定一種模式。1.0.*>=1.0,<1.1是等效的。
    賦值運算符 ~1.2 這對於遵循語義化版本號的項目很是有用。~1.2至關於>=1.2,<2.0

安裝依賴包

   如今咱們的示例項目已經有了composer.json文件,接下來咱們就須要經過composer命令來安裝依賴。安裝依賴包步驟以下:spa

  • 切換到項目的根目錄;
  • 執行composer install命令。

   接下來就是等待安裝依賴包的過程,安裝完成後,咱們的項目目錄將會變成這個樣子:code

project/
    ├── src/
    │  ├── a.class.php
    │  ├── b.class.php
    ├── vendor/
    ├── composer.json
    ├── composer.lock

   多了一個vendor文件夾和一個composer.lock文件。對於vendor目錄,這是composer的一個慣例,把第三方的代碼到一個指定的目錄vendor。對象

鎖文件

   在安裝依賴後,Composer將把安裝時確切的版本號列表寫入composer.lock文件。這將鎖定該項目的特定版本。

爲了保證版本一致問題,請提交你應用程序的composer.lock(包括composer.json)到版本庫中。

   這是很是重要的,由於install命令將會檢查鎖文件是否存在,若是存在,它將下載指定的版本(忽略composer.json文件中的定義)。

   這意味着,任何人創建項目都將下載與指定版本徹底相同的依賴。咱們的持續集成服務器、生產環境、你團隊中的其餘開發人員、每件事、每一個人都使用相同的依賴,從而減輕潛在的錯誤對部署的影響。

   若是不存在composer.lock文件,Composer將讀取composer.json並建立鎖文件。同時,這也意味着若是咱們的的項目依賴更新了新的版本,咱們將不會得到任何更新。此時要更新依賴版本則需使用update命令。這將獲取最新匹配的版本(根據composer.json文件)並將新版本更新進鎖文件。

composer update

Packagist

   Packagist是什麼?Packagist是Composer的主要資源庫。一個Composer的庫基本上是一個包的源:記錄了能夠獲得包的地方。Packagist的目標是成爲你們使用庫資源的中央存儲平臺。這意味着咱們能夠require那裏的任何包。

   咱們能夠訪問https://packagist.org來瀏覽和搜索咱們須要的資源包。

自動加載

   歸根到底,Composer是一個依賴管理的工具。咱們使用Composer將對應的依賴包下載下來之後,如何在咱們的項目中進行使用呢?對於這一點,Composer也想的很周到。

   已經存在的庫,咱們要把它加載到咱們的項目中,對於庫的自動加載信息,Composer生成了一個vendor/autoload.php文件。咱們能夠簡單的引入這個文件,這樣就會獲得一個免費的自動加載支持。而這一切都是Composer來幫助咱們完成的,咱們只須要在應用層使用便可。例如:

require 'vendor/autoload.php';

   這使得咱們能夠很容易的使用第三方代碼。例如:若是項目依賴monolog,咱們就能夠像這樣開始使用這個類庫,而且他們將被自動加載。

$log = new Monolog\Logger('name');
$log->pushHandler(new Monolog\Handler\StreamHandler('app.log', Monolog\Logger::WARNING));
$log->addWarning('Foo');
相關文章
相關標籤/搜索