摘要:是組件的依賴管理器,它在命令行中使用。廠商名和包名只是為了讓識別組件,而命名空間則是需要在代碼中使用組件。至此,我們的組件就發(fā)布成功了。總結(jié)以上就是關(guān)于安裝使用以及發(fā)布的介紹。
原文是在我自己博客中,小伙伴也可以點閱讀原文進(jìn)行跳轉(zhuǎn)查看,還有好聽的背景音樂噢~
????在現(xiàn)代化的PHP開發(fā)當(dāng)中,離開不了各種各樣的組件,那么如何快速在項目中安裝和找到這些組件呢?composer正是為這一目的而出現(xiàn),如果你還不知道composer,那么你就out了。那么什么是composer,它的作用是什么?如何使用?本文將一一揭曉。
組件在說composer之前,我們先來了解一下什么組件。因為組件和composer之間密切相關(guān),要想知道composer是如何工作的,我們要先清楚什么是組件。
什么是組件組件是打包的代碼,用于我們在實際項目中解決某個問題。比如你要輸出一段漂亮的數(shù)據(jù),擺脫var_dump和print_r函數(shù),那么我們就可以使用組件var-dumper組件;我們要寫日志,就可以使用monolog來實現(xiàn)。這些組件,已經(jīng)有PHP開發(fā)者開發(fā)出來,我們在項目中當(dāng)有這樣的場景的時候,直接拿來用就可以。
為什么要使用組件一句話來概括:別人已經(jīng)造好的輪子,我們?yōu)槭裁床荒脕碛媚兀课覀兺耆挥弥貜?fù)實現(xiàn)已經(jīng)實現(xiàn)了的功能,應(yīng)該要把更多時間用在項目的長遠(yuǎn)目標(biāo)上。
組件的特點我們在使用PHP組件的時候,要先判斷這個組件是否是我們需要的,是否有一些功能還不嚴(yán)謹(jǐn),就像在菜市場買菜,好壞都有。那么好的組件,基本上都具有這些特征:
作用單一組件的作用單一,能很好的解決一個問題。就像我們平時在項目中寫方法一樣,一個方法只做一件事情。
小型PHP組件代碼不多,因為它只為了解決某個問題而生產(chǎn)。
合作PHP組件之間可以進(jìn)行良好的合作。PHP的組件之間可以進(jìn)行合作,以便解決更復(fù)雜的問題。而且組件都會放在專屬的命名空間中,當(dāng)我們引入的時候,也不會與其他組件造成沖突。
測試良好PHP組件因為體型很小,所以測試起來也很方便。
文檔完善PHP組件的文檔應(yīng)該很完善,可以讓開發(fā)者們快速了解這個組件的安裝、使用。
獲取組件我們在簡單了解了組件之后,應(yīng)該會知道組件的好處了。那么我們?nèi)绾慰焖僬业浇M件呢?依賴百度和google搜索類庫嗎?不不,我們已經(jīng)有了一個專門放置組件的網(wǎng)站Packagist,這個網(wǎng)站就像一個巨大的組件倉庫,我們可以在里面搜索任何我們想要的組件,http、dump、route都有,而且這里的組件都是經(jīng)過開發(fā)者們嚴(yán)格測試過的。如果在搜索的時候不知道哪個組件好的話,就去選擇那些使用量高、訪問較多的吧,因為一般這些基本上都會沒有什么大問題。當(dāng)然不排除還有一些使用量不高但是仍然很優(yōu)異的組件,這就需要我們?nèi)ネ诰蛄恕?/p> Composer
在了解了組件之后,我們來說正題———Composer。如果說Packagist是組件庫,那么composer就是PHP組件管理工具了。composer是PHP組件的依賴管理器,它在命令行中使用。通常在你需要使用什么組件的時候,你只需要告訴composer,composer就會自動幫你安裝在你的項目中,只需要一個命令,就是這么簡單、強(qiáng)勢。
安裝國內(nèi)小伙伴在安裝composer的時候,可能會遇到很多問題。我在當(dāng)初安裝composer的時候,也走了不少彎路,現(xiàn)在這里推薦一個快速安裝composer的方法,打開命令行,執(zhí)行以下命令:
在使用這些命令之前,首先確認(rèn)已經(jīng)安裝了php,并且把php設(shè)置在了全局變量中,打開命令行輸入php -v能夠看到php版本信息
php -r "copy("https://install.phpcomposer.com/installer", "composer-setup.php");" php composer-setup.php php -r "unlink("composer-setup.php");"
以上三條,請依次輸入,作用分別是
下載安裝腳本 - composer-setup.php - 到當(dāng)前目錄。
執(zhí)行安裝過程。
刪除安裝腳本。
具體安裝過程,請查看composer中國鏡像網(wǎng)站的具體描述。
如何全局安裝請看:
設(shè)置完之后,在命令行輸入composer 可以看到composer版本信息。
使用上述中介紹了如何安裝composer,本章就來說下composer如何使用。我們先模擬下載一個PHP組件,首先我們在Packagist網(wǎng)站搜索dump,我們可以看到一個列表
這個列表里面展示的是查詢出來的所有dump組件包了,我們看到第一個symfony/var-dumper,composer和組件之間達(dá)成了協(xié)定,組件名字的第一個信息,以上述為例symfony表示廠商名,var-dumper表示包名。我們在命令行安裝組件的時候,要采用這種形式:
// vendor:廠商名 package:包名 composer require vendor/package
所以我們安裝symfony/var-dumper的時候,命令行輸入:
composer require symfony/var-dumper
composer會自動替我們找到var-dumper的穩(wěn)定版給我們安裝。我們可以看到安裝成功提示:
我們打開目錄可以看到,在目錄下生成了三個文件
vendor目錄是我們的組件目錄,composer.json執(zhí)行命令的結(jié)果文件,composer.lock列出了所有的php組件,以及具體版本號。
現(xiàn)在我們來使用一下這個dump組件,在根目錄中新建一個php文件:
首先引入自動加載器,然后使用dump方法來輸出變量,dump方法正是我們dump組件包里的一個輸出變量的函數(shù),下圖是運行文件后看到的結(jié)果,輸出了不一樣的打印樣式:
發(fā)布上面composer的安裝和使用已經(jīng)介紹完畢,接下來,我們試試看發(fā)布一個簡單PHP組件。其實很簡單,就像自己每天寫功能,把一些公用的方法封裝起來一樣;
廠商和包名在上文的使用中提到過,在我們開發(fā)PHP組件之前,我們可以先定義一下自己即將發(fā)布的PHP組件的廠商和包名,比如我要開發(fā)一個遍歷目錄下所有文件的組件,那么我可以將我的組件名定義為mingzhongshui/searchfile,mingzhonghsui便是我的廠商名,searchfile是包名,這個組件名將是全局唯一的名稱,以防和其他組件沖突。另外,我們在選擇廠商名之前,可以先在packages中搜索一下,看看有沒有一樣的。
命名空間每個組件都應(yīng)有自己的命名空間,這個命名空間并不需要與組件的廠商和包名一致。廠商名和包名只是為了讓composer識別組件,而命名空間則是需要在PHP代碼中使用組件。
組件的目錄結(jié)構(gòu)src/ 組件的源碼
tests/ 組件的測試代碼
composer.json composer配置文件,用于描述組件。同時還會告訴composer加載器,把符合PSR-4標(biāo)準(zhǔn)的規(guī)范的命名空間對應(yīng)到scr/目錄
README.md 這個markdown文件里可以寫組件的開發(fā)者以及組件用途、用法等
LICENSE 組件的軟件許可證
CHANGELOG.md 版本改動記錄
conposer.jsoncomposer.json文件是PHP組件中必不可少的文件,這個文件里面的內(nèi)容必須是純JSON格式,因為composer會根據(jù)這個文件中的內(nèi)容去加載、安裝PHP組件,我在這里簡單貼一下composer.json的示例內(nèi)容,這個composer.json文件就是我們剛剛下載dump組件中的:
{ "name": "symfony/var-dumper", "type": "library", "description": "Symfony mechanism for exploring and dumping PHP variables", "keywords": ["dump", "debug"], "homepage": "https://symfony.com", "license": "MIT", "authors": [ { "name": "Nicolas Grekas", "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], "require": { "php": "^5.5.9|>=7.0.8", "symfony/polyfill-mbstring": "~1.0" }, "require-dev": { "ext-iconv": "*", "twig/twig": "~1.34|~2.4" }, "conflict": { "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0" }, "suggest": { "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", "ext-symfony_debug": "" }, "autoload": { "files": [ "Resources/functions/dump.php" ], "psr-4": { "SymfonyComponentVarDumper": "" }, "exclude-from-classmap": [ "/Tests/" ] }, "minimum-stability": "dev", "extra": { "branch-alias": { "dev-master": "3.3-dev" } } }里面根據(jù)字面意思應(yīng)該能理解一部分,我在這里詳細(xì)解釋一番:
name 廠商名和包名
description 這個組件的一些簡短描述。這個值也會在packages中顯示
keywords 關(guān)鍵字。用于在packages找到這個組件
homepage 組件網(wǎng)站的url
license 軟件許可證。我們可以在https://choosealicense.com/中...
authors 表示這個組件的開發(fā)人員信息,是一個數(shù)組。每個作者信息至少有姓名和網(wǎng)站url
require 這個組件所需的其他PHP組件
require-dev 和require相似,表示開發(fā)或者測試時需要用到的PHP組件
suggest 和require相似,表示建議安裝的PHP組件,composer默認(rèn)不會自動安裝這里的組件
autoload 表示告訴composer加載器 如何加載這個組件
實現(xiàn)組件以上就是composer.json配置里面常用的參數(shù)介紹,接下來,我們就開發(fā)完成一個組件。我為了演示,寫好了一個組件,在本章一開始就提到的searchfile,內(nèi)容很簡單:
searchAllFile ( $sonPath ); } else { $result["file"][] = $sonPath; } } } closedir($handle); } return $result; } }一個簡單的查詢目錄所有文件的組件,我已經(jīng)把它放在了github倉庫中————地址是searchFile。
發(fā)布組件我們可以通過github倉庫的形式提交到packages,首先我們得有一個packagist的賬號,可以通過github登陸packagist,登陸之后,在頁面右上角會有一個submit提交按鈕,輸入組件所在的github倉庫地址
然后點擊check,之后點擊submit,packagist會自動創(chuàng)建組件頁面
我們可以看到,packagist自動從組件的composer.json中獲取到了組件的名稱、描述、關(guān)鍵字等信息。至此,我們的組件就發(fā)布成功了。
使用組件在命令行輸入
composer require mingzhongshui/searchfile他會自動幫你安裝searchfile組件,如果出現(xiàn)報錯可以使用開發(fā)版本:
composer require mingzhongshui/searchfile:dev-master使用這個的原因是,有時候composer用的是國內(nèi)的鏡像,他還沒有同步到源鏡像中。
設(shè)置鉤子當(dāng)我們把PHP組件發(fā)布到packagist之后,如果我們要更新我們已經(jīng)發(fā)布的組件時候該如何做呢?這時候有一個懶辦法,設(shè)置github鉤子使它自動同步更新packagist的組件。
訪問https://packagist.org/about#how-to-update-packages,這個地址是設(shè)置鉤子的說明,我們找到設(shè)置鉤子的url https://packagist.org/api/bitbucket?username=mingzhongshui&apiToken=API_TOKEN,這里的mingzhongshui是我packagist賬戶名,根據(jù)自己的真實情況替換即可;API_TOKEN指的是自己packagist賬戶中的API TOKEN,在https://packagist.org/profile/頁面中。打開自己的github PHP組件主頁,在setting中找到Webhooks,添加鉤子,保存
即可。
總結(jié)以上就是關(guān)于composer安裝、使用以及發(fā)布的介紹。那么我們有一個問題,我們在實際中如何快速找到優(yōu)秀的PHP組件呢,外國有位猿友ziadoz已經(jīng)整理好了一些優(yōu)秀的組件,并且列了一個列表,在github的鏈接為awesome-php,有需要什么組件的話,可以來這里看一下,作為參考。好了,以上就是關(guān)于composer的周邊故事。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/26038.html
摘要:如果說一個對象已經(jīng)不被任何程序邏輯所需要但是還存在被根元素引用的情況,我們可以說這里存在內(nèi)存泄露。圖內(nèi)存消耗聚集對象信息在這張圖上,我們可以清楚的看到,這個對象集合中保存了大量對象的引用,就是它導(dǎo)致的內(nèi)存泄露。 首先,之前在網(wǎng)上下載的是Myeclipse的插件 --memory analyzer,在網(wǎng)站的下面是Memory Analyzer的單機(jī)版,單機(jī)版安裝簡單,適合日常操作。下載地...
摘要:想要更好的利用協(xié)同工作,學(xué)會創(chuàng)建自己的包是一項必不可少的技能。編輯項目的或,增加一項配置,例如以上配置使用中國全量鏡像網(wǎng)站作為默認(rèn)中央倉庫。創(chuàng)建自己的包創(chuàng)建一個包只需兩步填寫包描述信息寫代碼。通過簡單兩步,我們創(chuàng)建的自己的包。 轉(zhuǎn)載請注明文章出處:https://tlanyan.me/php-review... PHP回顧系列目錄 PHP基礎(chǔ) web請求 cookie web響應(yīng) ...
摘要:前段時間發(fā)布了,反響一般,可能大家對于它并不敢興趣是因為安裝比較麻煩,或者一些其它原因。首先,看下什么是是一款驅(qū)動的博客系統(tǒng),使用存儲數(shù)據(jù),支持語法,可以快速發(fā)布文章資訊等。 前段時間發(fā)布了vino-blog,反響一般,可能大家對于它并不敢興趣是因為安裝比較麻煩,或者一些其它原因。其實我是希望它能夠獲得一些關(guān)注,于是開發(fā)了命令行工具方便大家快速安裝與調(diào)試和體驗。 首先,看下什么是Vin...
摘要:注意如果圖片顯示不正常把這個改成。使用庫方式切換操作各個數(shù)據(jù)庫保存快照的頻率,第一個表示多長時間,第二個表示執(zhí)行多少次寫操作。在一定時間內(nèi)執(zhí)行一定數(shù)量的寫操作時,自動保存快照。保存快照是否使用壓縮數(shù)據(jù)快照文件名只是文件名,不包括目錄。 Nginx+Tomcat集群第三步(負(fù)載均衡+基于Spring Boot的Session共享) Nginx和Tomcat沒安裝好的可以參考前兩步: Ce...
閱讀 1231·2021-11-11 16:54
閱讀 1748·2021-10-13 09:40
閱讀 943·2021-10-08 10:05
閱讀 3508·2021-09-22 15:50
閱讀 3711·2021-09-22 15:41
閱讀 1807·2021-09-22 15:08
閱讀 2350·2021-09-07 10:24
閱讀 3580·2019-08-30 12:52