溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Composer有什么用

發(fā)布時(shí)間:2021-02-23 13:49:52 來源:億速云 閱讀:271 作者:小新 欄目:軟件技術(shù)

小編給大家分享一下Composer有什么用,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

composer 是用來干嘛的?

對于不了解composer的同學(xué)來說,肯定會有這個疑問。

這個單詞經(jīng)常在網(wǎng)上看到,特別是在 GitHub 中,在使用 LaravelYii 時(shí)也經(jīng)??吹竭@個詞,在安裝的時(shí)候推薦使用 composer 安裝?難道只是安裝的時(shí)候使用嗎?我也使用過其他框架,為什么 ThinkphpCodeigniter 不用composer安裝呢?

帶著這些疑問,我們進(jìn)行學(xué)習(xí)。

composer 官方網(wǎng)址:https://www.phpcomposer.com

composer 是 PHP(5.3+) 用來管理依賴關(guān)系的工具。

長久以來,PHP的開源方式都是項(xiàng)目級的,就是說一開源就是一個項(xiàng)目,比如一整套的CMS(Dede、WordPress、discuz)、一整套框架(Thinkphp、Codeigniter)。為啥呢?其中一個很重要的原因是你不好拆開,如果拆開的話,沒有一個有效的管理工具組合起來,導(dǎo)致拆開的小模塊大家無人問津。

然后 composer 出現(xiàn)了,它就是一個有效的管理工具,它負(fù)責(zé)管理大家拆開的小模塊,然后進(jìn)行有效的整合,使之成為一個完整的項(xiàng)目。

比如,記錄日志使用 monolog/monolog ,HTTP client使用:guzzlehttp/guzzle 等等。

composer 包的平臺:https://packagist.org,這里面包含了大量的優(yōu)秀的安裝包,我們就很輕松一個 composer 命令就可以將優(yōu)秀的代碼用到我們項(xiàng)目中來。

作為一名驕傲PHPer,我們總不能永遠(yuǎn)只使用別人的開發(fā)包,我們必須自己動手開發(fā)一個包給別人用,給自己用。

我們既然知道了它有這么多的好處,就讓我們?nèi)W(xué)習(xí)他吧,先從 composer 的安裝說起。

composer 是如何安裝的?

官方入門文檔:https://docs.phpcomposer.com/00-intro.html

Composer有什么用

通過上述的方法,可以進(jìn)行安裝完成。

接下來我們以 GitHub 結(jié)合 Composer 工具來進(jìn)行示例講解如何開發(fā)一個 Composer 包。

composer 包是如何開發(fā)的?

比如,開發(fā)一個處理數(shù)字的 composer 包。

在 GitHub上 創(chuàng)建一個項(xiàng)目
  1. 登錄 GitHub(如果沒有賬號,請進(jìn)行創(chuàng)建),點(diǎn)擊右上角“+”,選擇“New repository”。

  2. 在創(chuàng)建界面中,Repository name 填寫“numberFormat”,Description是選填的,暫時(shí)先不填, 接著在 Public(GitHub推薦的方式,免費(fèi),所有人都能訪問)和 Private(收費(fèi),指定人才能訪問,2019-01-09后對個人開發(fā)者免費(fèi)了)中選擇“Public”,接著在勾選“Initialize this repository with a README”,點(diǎn)擊“Create Repository”按鈕后創(chuàng)建成功。

至此,表示在GitHub上已經(jīng)創(chuàng)建了一個名為“numberFormat”的空項(xiàng)目。

接下來,需要將遠(yuǎn)程的項(xiàng)目 clone 到本地(Git命令行、Git客戶端)進(jìn)行編碼。

學(xué)習(xí)創(chuàng)建 composer.json

composer.json 有哪些參數(shù),如何編寫,請參考文檔:https://docs.phpcomposer.com/04-schema.html#composer.json

一個項(xiàng)目要調(diào)用開發(fā)包,通過composer.json就可以知道該樣去加載文件。

composer.json 可以使用兩個方式創(chuàng)建,一種是 composer init,另一種是手工創(chuàng)建。

咱們一起先執(zhí)行下 composer init 看看效果。

在本地創(chuàng)建numberFormat目錄,然后 git clone 剛才創(chuàng)建的項(xiàng)目。

//進(jìn)入到本地numberFormat目錄	
composer init	
Welcome to the Composer config generator	
This command will guide you through creating your composer.json config.	
Package name (<vendor>/<name>) [root/number-format]:number-format/number-format	
Description []:一個處理數(shù)字的包	
Author [XinLiang <109760455@qq.com>, n to skip]:  //回車	
Minimum Stability []: //回車	
Package Type (e.g. library, project, metapackage, composer-plugin) []: //回車	
License []: //回車	
Define your dependencies.	
Would you like to define your dependencies (require) interactively [yes]?no	
Would you like to define your dev dependencies (require-dev) interactively [yes]?no	
{	
    "name": "number-format/number-format",	
    "description": "一個處理數(shù)字的包",	
    "authors": [	
        {	
            "name": "XinLiang",	
            "email": "109760455@qq.com"	
        }	
    ],	
    "require": {}	
}	
Do you confirm generation [yes]?  //回車

至此,本地numberFormat目錄就看到 composer.json 文件了,當(dāng)然可以直接在目錄下按照這個格式進(jìn)行手工創(chuàng)建,后期直接編輯該文件即可。

創(chuàng)建項(xiàng)目編碼內(nèi)容

開發(fā)包結(jié)構(gòu)如下:

--src 源碼目錄(必須)

--tests 單元測試目錄(非必須)

我們按照既定的目錄結(jié)構(gòu)去創(chuàng)建目錄和文件,然后再到composer.json里面修改一下即可。

接下來,在src目錄中創(chuàng)建一個類(NumberFormat.php):

/**	
 * 數(shù)字格式化類	
 * @author XinLiang	
 */	
namespace numberFormat;	
class NumberFormat	
{	
    /**	
     * 格式化字節(jié)	
     * @param int $num       數(shù)字	
     * @param int $precision 精準(zhǔn)度	
     * @return string	
     */	
    public static function byte_format($num = 0, $precision = 1)	
    {	
        if ($num >= 1000000000000)	
        {	
            $num = round($num / 1099511627776, $precision);	
            $unit = 'TB';	
        }	
        elseif ($num >= 1000000000)	
        {	
            $num = round($num / 1073741824, $precision);	
            $unit = 'GB';	
        }	
        elseif ($num >= 1000000)	
        {	
            $num = round($num / 1048576, $precision);	
            $unit = 'MB';	
        }	
        elseif ($num >= 1000)	
        {	
            $num = round($num / 1024, $precision);	
            $unit = 'KB';	
        }	
        else	
        {	
            return number_format($num).' Bytes';	
        }	
        return number_format($num, $precision).' '.$unit;	
    }	
}

修改 composer.json

{	
    "name": "number-format/number-format",	
    "description": "一個處理數(shù)字的包",	
    "authors": [	
        {	
            "name": "XinLiang",	
            "email": "109760455@qq.com"	
        }	
    ],	
    "minimum-stability": "dev",	
    "require": {	
        "php": ">=5.3.0"	
    },	
    "autoload": {	
        "psr-4": {	
            "numberFormat\\": "src/"	
        }	
    },	
    "license": "MIT"	
}

至此,我們的開發(fā)包已經(jīng)完成,接下來我們來測試下這個包是否可用。

測試開發(fā)包

在本地numberFormat目錄下,通過 composer install 安裝

composer install	
Loading composer repositories with package information	
Updating dependencies (including require-dev)	
Nothing to install or update	
Writing lock file	
Generating autoload files	
//表示安裝成功

驚奇的發(fā)現(xiàn),在本地numberFormat目錄多一個 vendor目錄。

在tests目錄創(chuàng)建 NumberFormatTest.php

/**	
 * 數(shù)字格式化測試類	
 * @author XinLiang	
 */	
require '../vendor/autoload.php';	
use \numberFormat;	
$number = '102400010';	
echo numberFormat\NumberFormat::byte_format($number);	
//輸出:97.7 MB

至此,測試成功,接下來就是要發(fā)布到packagist平臺,給廣大開發(fā)者見面了。

發(fā)布到 packagist 平臺

packagist.org 為 composer 安裝包的平臺(可用GitHub賬號登錄)。

  1. 現(xiàn)將本地代碼提交到GitHub。

  2. 發(fā)布到 packagist 平臺,登錄后在首頁的右上角有一個"Submit"按鈕,點(diǎn)擊即可進(jìn)入開發(fā)包提交的界面。在“Repository URL (Git/Svn/Hg)”輸入框中,輸入GitHub項(xiàng)目的地址,點(diǎn)擊“Check”按鈕,稍微等待幾秒鐘,會顯示驗(yàn)證成功,并顯示出“Submit”按鈕,點(diǎn)擊即完成了開發(fā)包的提交了。

恭喜你,這個開發(fā)包可以在任何支持 composer 的PHP框架中使用了。

那么問題來了,剛才我們的包寫的有的簡陋,后期我們維護(hù)代碼,新增代碼還需要按照原來的方式操作一遍嗎?

不!因?yàn)槲覀兛梢栽贕itHub平臺設(shè)置代碼更新,同時(shí)能讓 packagist.org 自動更新,是不是很酷!

在GitHub中找到代碼倉庫,然后選擇"settings" -> “Webhooks” ,默認(rèn)是綁定自動更新的。

如果未綁定,可以這樣設(shè)置:"settings" -> “Webhooks” -> "Add webhook" ->

  1. Payload URL填寫:“https://packagist.org/api/github”

  2. Content type填寫:“application/json”

  3. Secret填寫:“packagist提供的token”

  4. 其他的默認(rèn)即可

  5. 點(diǎn)擊“Add webhook” 完成。

至此,后期我們更新代碼后會自動同步到 packagist.org 上。

//其他開發(fā)者可以這樣獲取包	
composer require number-format/number-format:dev-master

為什么會有:dev-master,為什么引用其他的包不用這樣設(shè)置?

因?yàn)槲覀円玫钠渌际欠€(wěn)定包,默認(rèn)為:-stable。

是因?yàn)槲覀?composer.json 中設(shè)置了 minimum-stability 屬性,這個可以了解下“版本約束”,在這就不多說了。

當(dāng)我們在發(fā)布包后,如果獲取不到報(bào)錯怎么辦,有可能是鏡像的問題。

composer 設(shè)置鏡像地址
//查看全局設(shè)置	
composer config -gl	
//第一種:設(shè)置國內(nèi)鏡像	
composer config -g repo.packagist composer https://packagist.phpcomposer.com	
//第二種:設(shè)置國內(nèi)鏡像	
composer config -g repo.packagist composer https://packagist.laravel-china.org	
//第三種:設(shè)置國內(nèi)鏡像	
composer config -g repos.packagist composer https://php.cnpkg.org

看完了這篇文章,相信你對“Composer有什么用”有了一定的了解,如果想了解更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI