php系列一之composer的安裝與使用

  • 2019 年 11 月 20 日
  • 筆記

什麼是 composer

簡單來說,composer 之於 php 相當於 maven 和 gradle 之於 java,npm 之於 nodejs,pip 之於 python,go mod 之於 golang。是 php 中的一款依賴管理的工具。

如何安裝 Composer

下載 Composer

安裝前請務必確保已經正確安裝了 PHP。打開命令行窗口並執行 php -v 查看是否正確輸出版本號。

打開命令行並依次執行下列命令安裝最新版本的 Composer:

php -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php');"  php composer-setup.php  php -r "unlink('composer-setup.php');"

執行第一條命令下載下來的 composer-setup.php 腳本將簡單地檢測 php.ini 中的參數設置,如果某些參數未正確設置則會給出警告;然後下載最新版本的 composer.phar 文件到當前目錄。

上述 3 條命令的作用依次是:

  1. 下載安裝腳本 - composer-setup.php - 到當前目錄。
  2. 執行安裝過程。
  3. 刪除安裝腳本。

局部安裝

上述下載 Composer 的過程正確執行完畢後,可以將 composer.phar 文件複製到任意目錄(比如項目根目錄下),然後通過 php composer.phar 指令即可使用 Composer 了!

全局安裝

全局安裝是將 Composer 安裝到系統環境變數 PATH 所包含的路徑下面,然後就能夠在命令行窗口中直接執行 composer 命令了。

Mac 或 Linux 系統:

打開命令行窗口並執行如下命令將前面下載的 composer.phar 文件移動到 /usr/local/bin/ 目錄下面:

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

Windows 系統:

找到並進入 PHP 的安裝目錄(和你在命令行中執行的 php 指令應該是同一套 PHP)。將 composer.phar 複製到 PHP 的安裝目錄下面,也就是和 php.exe 在同一級目錄。在 PHP 安裝目錄下新建一個 composer.bat 文件,並將下列程式碼保存到此文件中。

@php "%~dp0composer.phar" %*

最後重新打開一個命令行窗口試一試執行 composer --version 看看是否正確輸出版本號。

最後

提示:不要忘了經常執行 composer selfupdate 以保持 Composer 一直是最新版本哦!

關於升級 Composer

Composer 升級時是無法利用我們的鏡像加速下載的,而必須連接到 Composer 國外官網的伺服器上下載升級文件,某些時候就會導致升級的速度非常慢甚至失敗。

這裡提供一個簡單的辦法:如果你的系統中已經有可以正常使用的 Composer 了,說明系統環境是符合要求的,那麼只需要下載新的 Composer 文件並覆蓋原來的文件即可。首先你要確定現有的 Composer 的安裝目錄,然後通過下面的鏈接下載 composer.phar 文件(複製以下地址到瀏覽器地址欄可直接下載),

https://install.phpcomposer.com/composer.phar

將前面下載的 composer.phar 文件覆蓋系統中已經安裝的 composer.phar 文件即可。注意,有可能在安裝時將 composer.phar 改名為 composer 了,注意用同樣的名字覆蓋即可。

使用

查找包

  • 使用:https://packagist.org/ 進行依賴包的查找,有點類似於一個倉庫。
  • 然後將依賴的資訊配置到工程的 composer.json 中,執行 composer install 即可。
  • 也可以使用 composer search 指令查找依賴包。
  • 查看包的具體資訊 composer show mustache/mustache --all

有一些國外的依賴,可能會下載不成功,這時就需要使用鏡像了。

鏡像

鏡像用法

有兩種方式啟用本鏡像服務:

  • 系統全局配置:即將配置資訊添加到 Composer 的全局配置文件 config.json 中。見「方法一」
  • 單個項目配置:將配置資訊添加到某個項目的 composer.json 文件中。見「方法二」

方法一:修改 composer 的全局配置文件(推薦方式)

打開命令行窗口(windows 用戶)或控制台(Linux、Mac 用戶)並執行如下命令:

composer config -g repo.packagist composer https://packagist.phpcomposer.com

方法二:修改當前項目的 composer.json 配置文件:

打開命令行窗口(windows 用戶)或控制台(Linux、Mac 用戶),進入你的項目的根目錄(也就是 composer.json 文件所在目錄),執行如下命令:

composer config repo.packagist composer https://packagist.phpcomposer.com

上述命令將會在當前項目中的 composer.json 文件的末尾自動添加鏡像的配置資訊(你也可以自己手工添加):

"repositories": {    "packagist": {        "type": "composer",        "url": "https://packagist.phpcomposer.com"    }}

以 laravel 項目的 composer.json 配置文件為例,執行上述命令後如下所示(注意最後幾行):

{    "name": "laravel/laravel",    "description": "The Laravel Framework.",    "keywords": ["framework", "laravel"],    "license": "MIT",    "type": "project",    "require": {        "php": ">=5.5.9",        "laravel/framework": "5.2.*"    },    "config": {        "preferred-install": "dist"    },    "repositories": {        "packagist": {            "type": "composer",            "url": "https://packagist.phpcomposer.com"        }    }}

OK,一切搞定!試一下 composer install 來體驗飛一般的速度吧!

鏡像原理:

一般情況下,安裝包的數據(主要是 zip 文件)一般是從 github.com 上下載的,安裝包的元數據是從 packagist.org 上下載的。

然而,由於眾所周知的原因,國外的網站連接速度很慢,並且隨時可能被「牆」甚至「不存在」。

「Packagist 中國全量鏡像」所做的就是快取所有安裝包和元數據到中國的機房並通過中國的 CDN 進行加速,這樣就不必再去向國外的網站發起請求,從而達到加速 composer install 以及 composer update 的過程,並且更加快速、穩定。因此,即使 packagist.org、github.com 發生故障(主要是連接速度太慢和被牆),你仍然可以下載、更新安裝包。

解除鏡象:

如果需要解除鏡像並恢復到 packagist 官方源,請執行以下命令:

composer config -g --unset repos.packagist

執行之後,composer 會利用默認值(也就是官方源)重置源地址。

將來如果還需要使用鏡像的話,只需要根據前面的「鏡像用法」中介紹的方法再次設置鏡像地址即可。

composer 使用

在使用 composer 後目錄中會出現 2 個文件,composer.lock 和 composer.json,現在來說說這兩個文件的作用。

composer.json

composer.json 文件中保存的是我們安裝的組件及組件的版本要求。

comopser.lock

composer.lock 這個文件主要是解決在協同開發中組件及其依賴的版本記錄,防止不同人使用的組件及依賴版本不同。composer.lock 保存的是組件及其依賴的具體版本,在多人協同開發的情況下,這個文件能很好的解決組件不同而產生的問題。在使用 composer install 的時候是不會修改 composer.lock 這個文件,所以會把這個文件也放入版本管理中,其它人在使用時只需要 composer install 就可以了。而使用 composer update 後修改這個文件。

參考

  • https://pkg.phpcomposer.com/#how-to-install-composer
  • https://packagist.org/packages/nesbot/carbon

Tags: