[教學]composer 是一款方便的php套件管理工具

PHP是一款我自己覺得寫起來不會太難的一個程式語言,而且PHP也還蠻自由的,只要我們以「<?php」為開頭,我們就能夠開始編寫我們的網站,但是也是因為太過自由,因此導致大家寫的程式,可說是各立山頭(以前的情況),想是我自己以前寫過的程式,到了現在幾乎是直接放棄了,至於所引用的套件,可能因為引用的地方太多,所以造成套件很難升級,也因此,php就開始有了各式各樣的規範,以及套件管理器,changken最近也發現官方也有出一個自己的套件管理,它好像叫做pecl、pear(沒用過)。

資訊:

教學:

如果你是使用windows的話,請直接使用composer-setup.exe來安裝。

如果你是linux及mac的話,則請下載官網提供的installer或composer.phar來使用。

常用指令:

1.

composer install

這個指令主要是在你的專案還沒有安裝好時才能使用的,它會幫助你下載在composer.json所的定義好的套件及其版本,但如果你的專案已經有了composer.lock的話,那專案套件的版本則是會直接參考composer.lock,如果你把composer.lock加到版控中的話,優點是下一位使用者重新安裝之後,它會得到跟你一模一樣的環境,缺點是所安裝套件的版本可能不會是最新的。

2.

composer update

它可以幫助你更新你的套件,當你的套件安裝好了之後,可能套件的作者又發行了新的一版,屆時你就可以使用這一道指令來更新你的套件。

3.

composer dump-autoload

或

composer dumpautoload

這個指令能夠幫助你重新產生有關autoload的檔案,如果你有修改composer.json的autoload(或autoload-dev)部分的話,那你一定要再執行一次這個指令。

4.

composer require vendor_name/package_name

{
    "require": {
        "vendor_name/package_name" : "version"
    }
}
composer update

至於安裝套件的話,你可以使用composer require這個命令或者是先修改composer.json的require的部分,再下composer update。

5.

composer remove vendor_name/package_name

或先刪除在composer.json中的套件紀錄,再執行:

composer update

有時候你不在需要特定套件,你只需要下這個命令,它就可以幫助您移除專案的相依套件唷~

6.

composer global [install|remove|require|update]

除了各個專案以外,其實composer自己也有著全域的套件管理,一般來說會在這邊安裝的套件大多會是以工具為主,像是phpunit、laravel、phalcon等cli工具,並且請注意像是在winodws系統之下,此路徑會是: C:\Users\使用者\AppData\Roaming\Composer、而linux系列系統則會是在/home/使用者/.composer之下,不過在它們底下都會有vendor/bin的目錄,也因此在使用cli工具之前請記得將它加入path之中!

7.

composer init

如果你想要寫一個新的專案的話,那你一定要下這個指令,因為它可以幫助你初始化你的composer.json檔,像是專案的基本名稱以及相依套件,還有自動引入的檔案!

8.

Autoloading

這是最為重要的觀念,因為php不像java、c#有著import和package的觀念,不過後來有一群人就一起制定了相關規則像是psr(php standard recommandations)等規格,它可以幫助你更有結構地開發你的php程式,但是你也可以選擇不要遵守這些規定。

a.psr-0(廢棄): 過時的東西,不要用,這是在php5.3的namespace還沒有出來的產物。

b.psr-4:

這是遵照psr-4規範的自動引入的方式。

VendorName\SubVendorName\...\ClassName

像是由Changken\開始的命名空間,autoloader就會從src/Changken這個目錄之下來參考路徑,有點類似namespace轉換成為實體路徑的概念,changken我會建議大家去使用它。

{

   "autoload": {
      "psr-4":{
          "Changken\\": "src/Changken/"
      }
   }
}

c.classmap:

這個主要會是自動引入在像是src的目錄底下的class,請注意!class名稱要跟檔名一樣唷~

當然!你也可以只引入單一檔案,比如你的檔案有定義一大堆class,autoloader就會自動去你所定義的單檔來找class,但changken我自己是不太會去用這個功能啦~

{
    "autoload": {
        "classmap" : [
            "src/",
            "lib/",
            "some.php"
        ]
    }
}

d.files

你如果不想要定義類別,而是只想要引入一個檔案的話,那你就可以使用這個功能了!

{
    "autoload" : {
        "files" : [
            "src/helpers/test.php"
        ]
    }
}

結語

composer好用是好用啦,但是作為一般的開發者的我們則必須要有先備知識,知道php的痛點在於哪裡,所以我們才會因此感同身受了解原生的php是哪邊不太完美,也因此使得我們不會盲目地使用composer而不知道為什麼要使用它。