對于不了解composer的同學來說,肯定會有這個疑問。
這個單詞經常在網上看到,特別是在 GitHub 中,在使用 Laravel
、 Yii
時也經??吹竭@個詞,在安裝的時候推薦使用 composer 安裝?難道只是安裝的時候使用嗎?我也使用過其他框架,為什么 Thinkphp
、 Codeigniter
不用composer安裝呢?
帶著這些疑問,我們進行學習。
composer 官方網址:https://www.phpcomposer.com
composer 是 PHP(5.3+) 用來管理依賴關系的工具。
長久以來,PHP的開源方式都是項目級的,就是說一開源就是一個項目,比如一整套的CMS(Dede、WordPress、discuz)、一整套框架(Thinkphp、Codeigniter)。為啥呢?其中一個很重要的原因是你不好拆開,如果拆開的話,沒有一個有效的管理工具組合起來,導致拆開的小模塊大家無人問津。
然后 composer 出現了,它就是一個有效的管理工具,它負責管理大家拆開的小模塊,然后進行有效的整合,使之成為一個完整的項目。
比如,記錄日志使用 monolog/monolog ,HTTP client使用:guzzlehttp/guzzle 等等。
composer 包的平臺:https://packagist.org,這里面包含了大量的優秀的安裝包,我們就很輕松一個 composer 命令就可以將優秀的代碼用到我們項目中來。
作為一名驕傲PHPer,我們總不能永遠只使用別人的開發包,我們必須自己動手開發一個包給別人用,給自己用。
我們既然知道了它有這么多的好處,就讓我們去學習他吧,先從 composer 的安裝說起。
官方入門文檔:https://docs.phpcomposer.com/00-intro.html
通過上述的方法,可以進行安裝完成。
接下來我們以 GitHub 結合 Composer 工具來進行示例講解如何開發一個 Composer 包。
比如,開發一個處理數字的 composer 包。
登錄 GitHub(如果沒有賬號,請進行創建),點擊右上角“+”,選擇“New repository”。
在創建界面中,Repository name 填寫“numberFormat”,Description是選填的,暫時先不填, 接著在 Public(GitHub推薦的方式,免費,所有人都能訪問)和 Private(收費,指定人才能訪問,2019-01-09后對個人開發者免費了)中選擇“Public”,接著在勾選“Initialize this repository with a README”,點擊“Create Repository”按鈕后創建成功。
至此,表示在GitHub上已經創建了一個名為“numberFormat”的空項目。
接下來,需要將遠程的項目 clone 到本地(Git命令行、Git客戶端)進行編碼。
composer.json 有哪些參數,如何編寫,請參考文檔:https://docs.phpcomposer.com/04-schema.html#composer.json
一個項目要調用開發包,通過composer.json就可以知道該樣去加載文件。
composer.json 可以使用兩個方式創建,一種是 composer init
,另一種是手工創建。
咱們一起先執行下 composer init
看看效果。
在本地創建numberFormat目錄,然后 git clone 剛才創建的項目。
//進入到本地numberFormat目錄composerinitWelcometotheComposerconfiggeneratorThiscommandwillguideyouthroughcreatingyourcomposer.jsonconfig.Packagename(<vendor>/<name>)[root/number-format]:number-format/number-formatDescription[]:一個處理數字的包Author[XinLiang<109760455@qq.com>,ntoskip]://回車MinimumStability[]://回車PackageType(e.g.library,project,metapackage,composer-plugin)[]://回車License[]://回車Defineyourdependencies.Wouldyouliketodefineyourdependencies(require)interactively[yes]?noWouldyouliketodefineyourdevdependencies(require-dev)interactively[yes]?no{"name":"number-format/number-format","description":"一個處理數字的包","authors":[{"name":"XinLiang","email":"109760455@qq.com"}],"require":{}}Doyouconfirmgeneration[yes]?//回車
至此,本地numberFormat目錄就看到 composer.json 文件了,當然可以直接在目錄下按照這個格式進行手工創建,后期直接編輯該文件即可。
開發包結構如下:
--src 源碼目錄(必須)
--tests 單元測試目錄(非必須)
我們按照既定的目錄結構去創建目錄和文件,然后再到composer.json里面修改一下即可。
接下來,在src目錄中創建一個類(NumberFormat.php):
/***數字格式化類*@authorXinLiang*/namespacenumberFormat;classNumberFormat{/***格式化字節*@paramint$num數字*@paramint$precision精準度*@returnstring*/publicstaticfunctionbyte_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{returnnumber_format($num).'Bytes';}returnnumber_format($num,$precision).''.$unit;}}
修改 composer.json
{"name":"number-format/number-format","description":"一個處理數字的包","authors":[{"name":"XinLiang","email":"109760455@qq.com"}],"minimum-stability":"dev","require":{"php":">=5.3.0"},"autoload":{"psr-4":{"numberFormat\\":"src/"}},"license":"MIT"}
至此,我們的開發包已經完成,接下來我們來測試下這個包是否可用。
在本地numberFormat目錄下,通過 composer install
安裝
composerinstallLoadingcomposerrepositorieswithpackageinformationUpdatingdependencies(includingrequire-dev)NothingtoinstallorupdateWritinglockfileGeneratingautoloadfiles//表示安裝成功
驚奇的發現,在本地numberFormat目錄多一個 vendor
目錄。
在tests目錄創建 NumberFormatTest.php
/***數字格式化測試類*@authorXinLiang*/require'../vendor/autoload.php';use\numberFormat;$number='102400010';echonumberFormat\NumberFormat::byte_format($number);//輸出:97.7MB
至此,測試成功,接下來就是要發布到packagist平臺,給廣大開發者見面了。
packagist.org 為 composer 安裝包的平臺(可用GitHub賬號登錄)。
現將本地代碼提交到GitHub。
發布到 packagist 平臺,登錄后在首頁的右上角有一個"Submit"按鈕,點擊即可進入開發包提交的界面。在“Repository URL (Git/Svn/Hg)”輸入框中,輸入GitHub項目的地址,點擊“Check”按鈕,稍微等待幾秒鐘,會顯示驗證成功,并顯示出“Submit”按鈕,點擊即完成了開發包的提交了。
恭喜你,這個開發包可以在任何支持 composer 的PHP框架中使用了。
那么問題來了,剛才我們的包寫的有的簡陋,后期我們維護代碼,新增代碼還需要按照原來的方式操作一遍嗎?
不!因為我們可以在GitHub平臺設置代碼更新,同時能讓 packagist.org 自動更新,是不是很酷!
在GitHub中找到代碼倉庫,然后選擇"settings" -> “Webhooks” ,默認是綁定自動更新的。
如果未綁定,可以這樣設置:"settings" -> “Webhooks” -> "Add webhook" ->
Payload URL填寫:“https://packagist.org/api/github”
Content type填寫:“application/json”
Secret填寫:“packagist提供的token”
其他的默認即可
點擊“Add webhook” 完成。
至此,后期我們更新代碼后會自動同步到 packagist.org 上。
//其他開發者可以這樣獲取包composerrequirenumber-format/number-format:dev-master
為什么會有:dev-master,為什么引用其他的包不用這樣設置?
因為我們引用的其他包都是穩定包,默認為:-stable。
是因為我們 composer.json 中設置了 minimum-stability 屬性,這個可以了解下“版本約束”,在這就不多說了。
當我們在發布包后,如果獲取不到報錯怎么辦,有可能是鏡像的問題。
//查看全局設置composerconfig-gl//第一種:設置國內鏡像composerconfig-grepo.packagistcomposerhttps://packagist.phpcomposer.com//第二種:設置國內鏡像composerconfig-grepo.packagistcomposerhttps://packagist.laravel-china.org//第三種:設置國內鏡像composerconfig-grepos.packagistcomposerhttps://php.cnpkg.org
看完了這篇文章,相信你對“Composer有什么用”有了一定的了解,如果想了解更多相關知識,歡迎關注本站行業資訊頻道,感謝各位的閱讀!
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
c語言中正確的字符常量是用一對單引號將一個字符括起表示合法的字符常量。例如‘a’。數值包括整型、浮點型。整型可用十進制,八進制,十六進制。八進制前面要加0,后面...
2022年天津專場考試原定于3月19日舉行,受疫情影響確定延期,但目前延期后的考試時間推遲。 符合報名條件的考生,須在規定時間登錄招考資訊網(www.zha...
:喜歡聽,樂意看。指很受歡迎?!巴卣官Y料”喜聞樂見:[ xǐ wén lè jiàn ]詳細解釋1. 【解釋】:喜歡聽,樂意看。指很受歡迎。2. 【示例】:這是...
中歐滬深300指數多空分級基金怎么買?好像沒有以中歐滬深300lof為標的的分級基金。做空滬深300e TF有兩種:華泰白銳滬深300e TF和嘉實滬深300e TF。滬深300ETF都是通過融資融券變相做空,但和股指期貨做空還是有很大區別的,主要是杠桿比例相差很多:股指期貨保證金一般是20%,也就是最大杠桿是5倍;融資融券最高只有50%,也就是2倍杠桿(各個期貨、證券公司的要求不一樣,但大致相同...
歡迎觀看本篇文章,小勉來為大家解答以上問題。微信頭像上的國旗標志怎么弄的,教你如何在微信頭像加上國旗標志很多人還不知道,現在讓我們一起來看看吧!【資料圖】1、最近很多微信好友的頭像都加了紅旗。國慶來真的很好。這是怎么發生的?下面給大家介紹一下。2、首先打開微信,點擊右上角的【搜索】選項。3、在搜索界面中搜索,然后點擊打開。4、進入后回復【紅旗】,然后打開生成的鏈接。5、進入后點擊【微信頭像紅旗】。...
學過時尚的小伙伴應該會發現,其實,提高時尚品味是可以省錢的。最實用的是逛淘寶的時候,一眼就能從各種便宜的衣服里選出最好最合適的。再往前看,買一件衣服,就能想出各種穿法,一件能頂好幾件。而且,也很適合不買黨。在你提升了時尚思維之后,看看自己的衣柜,就能發現各種新的穿搭火花。再加上新的妝容和發型,不用買衣服就能做出各種新的漂亮造型~今天給大家帶來七本小女生Pakeezah分享的時尚雜志,她經常借鑒。這...