天天看點

PHP 之 Composer 新手入門指南

自2012年3月1日釋出以來,Composer因提供了PHP迫切需要的東西:依賴項管理而廣受歡迎。實際上,Composer是将所有第三方軟體(例如CSS架構,jQuery插件等)引入你的項目的一種方法。

我敢肯定,現在有很多編碼人員對使用作曲家的好處感到疑惑,并且還有很多人害怕去嘗試新的工具。在本文中,我們将會了解 Composer 它到底是什麼,它做了什麼,為什麼它是一個很棒的 PHP 開發工具。

首先,我們将更深入地了解依賴管理,然後安裝 Composer。我們将大緻了解一下它的基本用法,然後學習一些基礎知識。現在我們開始吧!

PHP 之 Composer 新手入門指南

什麼是依賴管理?

  • 依賴性管理實際上是一個非常簡單的概念。假設您現在需要建立一個單頁的網站,而你的 JavaScript 和 CSS 的需要用到 Foundation 架構。要如何将 Foundation 架構添加到項目中呢?
  • 通常的方法是通路網站,下載下傳軟體包并将其放在項目中的某個位置。到目前為止,一切都很好。現在,當你想更新到最新版本時該怎麼辦?你重複同樣的事情,覆寫舊版本。
  • 假設這種情況持續了一段時間,你發現有些東西壞了。他們改變了Foundation的某些内容,現在你必須復原,但是要去哪裡呢?你需要找到較舊的版本并開始應用它們,直到找到合适的版本為止。
  • 即使你能把這些都解決,那假設你現在開始着手别人的項目了,他們也使用 Foundation 嗎?如果用了,它安裝在哪裡呢,它是什麼版本呢?
  • 對于一個小的項目來說,這些看起來并不是什麼大問題,但是請想象一下一個擁有 8-10 個依賴(這仍然不算很多)的項目會怎樣。子產品化管理将變得不可能做到,或者至少是浪費時間的。
  • 依賴管理通過自動化和标準化來解決這些問題。依賴的檢索,如 Foundation、jQuery、Twig、Symphony、日志記錄子產品等等都可以通過以程式設計方式的方式來完成。還可以指定版本以防止沖突。
  • 依賴管理器将包的存儲方式和使用位置标準化。在實際應用中,這意味着每個使用相同依賴管理器的項目都将遵循相同的結構 —— 至少對于那些依賴是這樣。

安裝 Composer

Composer 有各個系統的版本。 在 Windows 系統,你可以通過 Composer Setup 檔案來安裝,安裝包可以在這個頁面 找到。 在基于 Linux 的系統, 包括 OSX,你可以在本地使用以下指令來安裝:

curl -sS https://getcomposer.org/installer | php
           

在你的項目目錄運作上面的指令,你會得到一個 composer.phar 檔案,該檔案可以用來運作 Composer。 我更喜歡全局安裝,這樣就可以在任何目錄下運作 Composer 指令。全局安裝需要運作以下指令::

mv composer.phar /usr/local/bin/composer
           

運作這個指令可能有兩種情況會産生錯誤。 一個是你沒有管理者權限,這時你可以在指令前面加 sudo 再運作。

sudo mv composer.phar /usr/local/bin/composer
           

另一個是,在 Yosemite 上運作, 因為沒有 usr 目錄, 這個指令會報錯,這時隻要建立相應的目錄再次運作就好了。

Composer 簡介

使用 Composer 進行依賴管理由兩個獨立的元素組成。第一個是 Composer 本身,它是用于擷取和管理依賴項的指令行工具。第二個是 Packaginst —— 主要的 Composer 庫,它是存儲了你可能想要使用的包的地方。

使用 Composer 時,依賴管理的核心是一個名為 composer.json 的 JSON 檔案。具體内容如下:

{
    "name": "danielpataki/my_project",
    "description": "My New Project",
    "authors": [
        {
            "name": "Daniel Pataki",
            "email": "[email protected]"
        }
    ],
    "require": {
        "monolog/monolog": "1.12.0"
    }
}
           

你的項目想要引入的依賴将會列在 require 項中。在上述情況中,我引入了 Monolog,它是一個流行的日志記錄架構。但是我僅有一個包含了這些資訊的 JSON 檔案并不意味着我就可以開始使用 Monolog 了。這時候就需要使用到指令行了。

使用指令行切換到項目檔案夾中,然後輸入 composer install 指令。這将把我所有的依賴引入到項目中,并做一些其他讓代碼整潔的事情。

PHP 之 Composer 新手入門指南

它建立了一個 vendor 目錄,該目錄容納了包括 Composer 在内的所有依賴項。截圖中還顯示了 Monolog 和 PSR,這是除 composer.lock 檔案外 Monolog 的依賴項。

到此為止,你已經可以開始使用您的依賴項了,但是我們還能做更多的事情來提高效率。讓我們進一步學習 Composer。

指定版本

在上面的代碼中,我們指定了版本 1.12.0,但在某些情況下,我們可能希望得到更大的版本範圍。有六種可以指定想要的版本的方法,讓我們來看看它們:

版本範圍

使用比較運算符,你可以擷取高于 1.3 并且低于 1.8 的版本,或者使用 AND 和 OR 邏輯擷取更複雜的版本集。使用的運算符可以是 >,<,>=,<= 和 !=。AND 邏輯用空格或逗号表示,OR 邏輯用雙豎線表示:||。

指定 >2.7 表示高于 2.7 的任意版本。>2.7 <=3.5 則表示高于 2.7 并低于 3.5(包括 3.5)的任何版本。

通配符版本

通過使用通配符,你可以指定版本的模式。例如 2.3.*,它表示包括 2.3.0 及以上并且低于 2.4.0 (不包括 2.4.0)的所有版本。它等價于 >=2.3.0 <2.4。

連字元範圍

使用連字元能讓你更容易地指定版本範圍,但是它對于版本的特殊處理方式容易讓人感到疑惑。一個完整的版本由三個數字組成,在這種情況下連字元範圍是完全合理的。

2.0.0 - 3.0.0 連字元範圍表示所有 2.0.0 以上并且在 3.0.0 以下的版本(包括了 2.0.0 和 3.0.0)都将被接受,等同于 >=2.0.0 <=3.0.0。

但是如果隻指定了部分的版本号,如 2.0 - 3.0,意味着任何高于 2.0 的版本(包括 2.0)但低于 3.1 版本。

這種看似奇怪的行為是因為連字元左側是包含的,右側則會使用通配符進行補全。上面的表達式等同于 >=2.1 ❤️.1.0

波浪号範圍

~ 運算符可以很好地标記你所依賴的最小次要版本,并允許任何高于此版本内容,但不包括下一個主要版本。如果你指定 ~3.6,那麼你将允許 3.6 及其以上的版本,但不包括 4.0 版本。

~ 運算符最好用示例解釋:~3.6 等價于 >=3.6 <4.0.0,而 ~3.6.3 等價于 >=3.6.3 ❤️.7.0。正如你所看到的,它對于尊重 語義版本控制的項目來說是非常有用的。因為理論上應該沒有向後相容性破壞直到 4.0,它會運作良好。另一種了解方式是使用 ~ 指定一個最小版本,但允許指定的最後一個數字增長。

注意: 雖然 4.0-beta.1 是在 4.0 之前,但版本限制,如 ~3.6 不會安裝它。正如上面所說的 ~3.6 隻意味着 .6 可以改變,但 3. 部分是固定的。

注意: ~ 運算符對其主要發行号的行為有例外。這意味着,~1 與 ~1.0 是相同的,因為它不會允許主數字增加以試圖保持向後相容性。

插入符

插入符範圍用于允許所有非中斷更新的情況。如果一個項目遵循語義版本控制,那麼在小版本的更新中不應該破壞主版本的相容性。也就是說,在你指定的該版本及以上的任何内容,不包括下一個主版本都不會破壞相容性。它與 ~ 非常相似,但它更接近語義版本控制。通過指定 ^3.3.5,可以允許 3.3.5 及以上,但不包括 4.0 以上的版本。

注意: 主版本号為零(0.y.z)的軟體處于開發初始階段,一切都可能随時被改變,這樣的版本被視為不穩定版。為了保證相容,^ 将不會更新到下一個小版本,如 ^0.3.0 等于 >=0.3.0 <0.4.0 而不是 >=0.3.0 <1.0.0。

Dev-Master

通過指定 dev-master,你将擷取目前開發的最新版本,該版本尚未标記版本号。這在開發過程中可能很好,但你需要知道,在這些版本中,bug 的可能性更高。

依賴的鎖定是 Composer 最有用的特性之一。我在前面提到過 composer.lock 檔案,這個檔案的作用就是是鎖定所用元件的版本。

鎖定檔案可以確定每個人都使用着相同版本的檔案。僅僅因為應用程式不應該由于元件更新而中斷,并不意味着團隊中所有的成員和生産伺服器都應該運作不同的版本。

當你第一次使用 Composer 擷取依賴項時,它會将确切的版本寫入鎖檔案。如果指定了 2.3.* 版本,并且 2.3.5 是當時最新版本,則會安裝 2.3.5 版本并将其記錄在鎖定檔案中。

假設一個開發人員在 10 天後加入團隊。這時,版本已經更新為 2.3.6。如果他使用正确的指令 (composer install),他将會安裝 2.3.5 版本,因為它已記錄在鎖檔案了。

當然,你依然可以更新依賴項。在這種情況下,你應該運作 composer update 指令。這将擷取允許的最新版本并将其寫入鎖檔案。然後将它分發給其他人,讓他們更新版本。

開發依賴

Composer 允許你指定開發依賴。這是通過在 require-dev 數組中指定你的依賴而不是 require 數組來完成的。

{
    "name": "danielpataki/my_project",
    "description": "My New Project",
    "authors": [
        {
            "name": "Daniel Pataki",
            "email": "[email protected]"
        }
    ],
    "require": {
        "monolog/monolog": "1.12.0"
    },
    "require-dev" : {
        "fzaninotto/faker", "dev-master"
    }
}
           

Faker 是一個生成假資料的 PHP 類。這對開發很有用但對生産來說并不需要。

請注意,預設情況下始終會安裝開發依賴,Composer 不會神奇地知道它何時在生産伺服器上運作。如果要排除開發依賴,則需要運作 install 或者 update 指令時加上 --no-dev 選項

Composer 現狀

Composer 在 PHP 開發中随處可見。 幾乎所有大型和知名的網站元件,如 jQuery,Foundation,Bootstrap,甚至 WordPress 都有一個 Composer 包。

此外,較小但同樣好用的代碼包也可以通過 Composer 檢索到。 如 Monolog 這樣的日志記錄包,PHP 郵件管理包,字元串操作類,PHP 單元和其他工具等等。

架構社群從 Composer 統一項目需求的能力中獲益匪淺。 備受青睐的 Laravel,FuelPHP,Yii Framework 等架構都依靠 Composer 将功能整合并共享給其他項目。

當然最大的好處是不易察覺的。當你需要共享或部署代碼時,Composer 非常好用。你不需要把大約 20-50MB 的相關但未使用的代碼拖來拖去。你隻需将它們寫入 composer.json 和 lock 檔案中,所有人都能在幾分鐘内得到同樣的頁面了。

結論

我希望我已經讓你對 Composer 強大的功能有所了解,但其實你還能使用它來做更多的事情。除了我們讨論的内容之外,Composer 還為你提供了出色的自動加載功能,你可以将腳本挂接到更新過程的任何步驟等等。

任何小組項目都應該使用 Composer,但即使你單獨工作,它還是非常實用的。它給你提供了很大的靈活性,并且給你的項目提供了不會過時的技術 ——你永遠不知道什麼時候你可能需要額外的幫助!

更多學習内容可以通路【對标大廠】精品PHP架構師教程目錄大全,隻要你能看完保證薪資上升一個台階(持續更新)

以上内容希望幫助到大家,很多PHPer在進階的時候總會遇到一些問題和瓶頸,業務代碼寫多了沒有方向感,不知道該從那裡入手去提升,對此我整理了一些資料,包括但不限于:分布式架構、高可擴充、高性能、高并發、伺服器性能調優、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql優化、shell腳本、Docker、微服務、Nginx等多個知識點進階進階幹貨需要的可以免費分享給大家,需要的可以加入我的PHP技術交流群953224940

進階PHP月薪30k>>>架構師成長路線【視訊、面試文檔免費擷取】

PHP 之 Composer 新手入門指南