聲明 :本文轉(zhuǎn)自??http://www.reibang.com/p/5954fe55d067??
PHP 的包管理工具 -- Composer
緣起
Composer 是 PHP 的一個包管理和包依賴管理的工具 ( 官方的定義是 "Dependency Manager for PHP" ), 類似 Mac 的Homebrew, CentOS 的yum, Windows 的Chocolatey, 以及 Node.js 的npm和 Python 的pip.
在 Composer 出現(xiàn)之前使用 PHP 第三方包的操作:
上網(wǎng)尋找類庫, 從官方或者第三方網(wǎng)站下載源碼;
解壓, 調(diào)試;
假如該類庫依賴于另外一個類庫, 返回第 1 步;
PS. 可以查看我的另一篇文章--CentOS 編譯安裝 PHP 的 Memcached 擴(kuò)展, 安裝 PHP 的 Memcached 插件時, 就需要考慮依賴的庫, 如果用 CentOS 的包管理工具 -- yum 就可以比較輕松地解決
這種方式帶來的問題:
沒有統(tǒng)一的規(guī)范的資源倉庫, 各種類庫散落在互聯(lián)網(wǎng)的各個角落, 不方便比較和下載; 如果多個類庫的作者更新了版本, 需要逐個去搜素下載和調(diào)試;
如果第三方網(wǎng)站提供的源碼被植入惡意代碼, 會引入安全問題;
遇到類庫的依賴關(guān)系, 需要手動下載和調(diào)試;
版本更新不方便. 這就意味著很可能作者更新了版本, 但是你還在使用帶 Bug 的舊版本;
安裝
Composer 要求 PHP 5.3.2 以上 (官方推薦使用 5.3.4 以上, 以避免潛在的問題).
如果在安裝時提醒缺少組件, 跟著提示解決即可.
在 Mac 終端中依次粘貼下面命令以安裝 Composer (考慮安全問題, 更加建議直接到官網(wǎng)拷貝安裝命令):
php -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php');"
php composer-setup.php
php -r "unlink('composer-setup.php');"
安裝后就可以使用php composer.phar來執(zhí)行命令;
為了全局調(diào)用, 可以修改環(huán)境變量mv ./composer.phar /usr/local/bin/composer, 之后就可以直接使用composer命令;
composer_installed
使用
連接國內(nèi)的第三方鏡像庫
由于眾所周知的原因, 訪問 Composer 官方的 packagist 網(wǎng)站速度比較慢, 可以選用第三方在國內(nèi)做的全景鏡像, 提高速度:
composer config -g repo.packagist composer https://packagist.phpcomposer.com
使用 composer 在已有項目中引入類庫
以使用 markdown 為例:
1.搜索: 在Packagist搜索類庫, 選用下載量最大的cebe/markdown類庫;
2.配置: 在項目根目錄新建 "composer.json" 文件, 文件內(nèi)容:
語法:
{"require":{"廠商/類庫":"版本"}}
比如:
{"require":{"cebe/markdown":"1.1.1"}}
PS: 配置文件中的 JSON 必須使用"雙引號", 而不能使用"單引號" (因為"雙引號"是 JSON 標(biāo)準(zhǔn)的規(guī)定的)
3.安裝
2.1cd到該項目根目錄, 運(yùn)行composer install;
2.2 安裝完畢后, 可以看到根目錄多出來一個 "vendor" 文件夾, 打開文件夾, 可以看到 "cebe" 文件夾, 里面有 "markdown" 的類庫源碼;
composer_success
4.加載
疑問: 如果我們在項目中用 Composer 安裝了十幾個類庫, 需要逐個require加載到我們的項目中嗎?
回答: 不需要. 因為 Composer 的作者已經(jīng)考慮了這個問題. 打開安裝之后生成的 "vendor" 文件, 里面有個 "autoload.php" 文件. 只要引入這個文件, 所有通過 Composer 安裝的類庫就會全部加載完成:
require(__DIR__.'/vendor/autoload.php');
5.如果以后需要新增類庫
第一種方法: 使用命令composer require, 比如composer require phpunit/phpunit:~5.7, 比如composer require twbs/bootstrap:4.0.0-beta.3;
第二種方法: 在 "composer.json" 文件中追加, 然后執(zhí)行composer update;
{"require":{"cebe/markdown":"1.1.1","phpunit/phpunit":"5.7.5"}}
通過 composer 直接創(chuàng)建某框架的項目
有些包并不是提供一個特定功能的類庫, 而是提供一個完整的框架, 比如說 Laravel 和 yii2.
直接創(chuàng)建項目的 Composer 命令是:
composer create-project 廠商/類庫 安裝路徑 版本
所以用 Composer 直接創(chuàng)建一個 Laravel 或者 yii2 的項目的命令是:
composer create-project laravel/laravel ./my_laravel_demo ~5.5.0
composer create-project yiisoft/yii2 ./my_yii2_demo 2.*
PS. 5.5 是 Laravel 的 LTS (Long Time Support) 版本.
如何指定類庫版本?
類別實(shí)例說明
指定版本號5.7.5直接指定確切的版本號
指定版本范圍>=5.6.7,<5.75.6.7或者以上,但是不到5.7的版本
通配符5.7.*相當(dāng)于>=5.7.0,<5.8.0
波浪號~5.7.5相當(dāng)于>=5.7.5,<5.8.0
如何更新類庫?
composer update
該命令主要有 2 個作用:
升級 composer.json 中的類庫, 并自動更新升級其依賴
更新自動加載的文件 -- autoload.php
因為執(zhí)行composer update需要比較長的時間, 如果只是需要更新自動加載的文件而不需要升級類庫(比如你新建了類), 可以執(zhí)行composer dump-autoload.
如何刪除引入的類庫?
composer remove 廠商/類庫
比如:
composer remove cebe/markdown
參考
Composer 官網(wǎng)(注意: 是 getcomposer.org, 而不是 composer.org)
Composer 對應(yīng)的PHP包倉庫 -- Packagist
國內(nèi)的第三方全景鏡像(推薦用官方源, 但是因為某些原因, 可能會用到國內(nèi)鏡像)
題外
公司開始規(guī)范開發(fā), 逐步引入 PSR, Laravel 框架, PHPUnit, Composer...
從個人來說, 真的很幸運(yùn), 能夠在這么一個時期加入公司, 在順流中借勢成長. 這也是為什么寫這篇博客的原因 -- 當(dāng)然, 這也是一個博客系列的開始
文章歷史
2017/01/08 (第一次發(fā)布)
2017/04/04 增加"連接國內(nèi)的第三方鏡像庫"
2017/05/25 更新安裝 Composer 的方法
2017/05/31 介紹composer dump-autoload命令
2017/06/11 刪掉"最小化操作流程"章節(jié), 避免用戶困惑; 介紹composer update命令; 提示 JSON 必須使用雙引號;
2017/07/09 增加"安裝 PHP 的 Memcached 插件的例子", 反襯包管理工具的好處;
2017/09/11 去掉"最小使用方法"章節(jié), 避免用戶混淆; 更新 Laravel 的 LTS;
作者:patiencing
鏈接:http://www.reibang.com/p/5954fe55d067
來源:簡書
簡書著作權(quán)歸作者所有海诲,任何形式的轉(zhuǎn)載都請聯(lián)系作者獲得授權(quán)并注明出處。