PHP 之 Composer 新手入門指南

it阿布發表於2020-08-04

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

我敢肯定,現在有很多編碼人員對使用作曲家的好處感到疑惑,並且還有很多人害怕去嘗試新的工具。在本文中,我們將會了解 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": "mail@mymail.com"
        }
    ],
    "require": {
        "monolog/monolog": "1.12.0"
    }
}

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

使用命令列切換到專案資料夾中,然後輸入 composer install 命令。這將把我所有的依賴引入到專案中,並做一些其他讓程式碼整潔的事情。


它建立了一個 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": "mail@mymail.com"
        }
    ],
    "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,但即使你單獨工作,它還是非常實用的。它給你提供了很大的靈活性,並且給你的專案提供了不會過時的技術 ——你永遠不知道什麼時候你可能需要額外的幫助!


以上內容希望幫助到大家,很多PHPer在進階的時候總會遇到一些問題和瓶頸,業務程式碼寫多了沒有方向感,不知道該從那裡入手去提升,對此我整理了一些資料,包括但不限於:分散式架構、高可擴充套件、高效能、高併發、伺服器效能調優、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql優化、shell指令碼、Docker、微服務、Nginx等多個知識點高階進階乾貨需要的可以免費分享給大家,進階PHP月薪30k>>>架構師成長路線【視訊、面試文件免費獲取】

更多學習內容可以訪問【對標大廠】精品PHP架構師教程目錄大全,只要你能看完保證薪資上升一個臺階(持續更新)

 

相關文章