学习开发自己的composer包,并使用GitHub实时更新到Packagist
composer是什么
Composer 不是一個包管理器。是的,它涉及 "packages" 和 "libraries",但它在每個項(xiàng)目的基礎(chǔ)上進(jìn)行管理,在你項(xiàng)目的某個目錄中(例如 vendor)進(jìn)行安裝。默認(rèn)情況下它不會在全局安裝任何東西。因此,這僅僅是一個依賴管理。
Composer 受到了 node's npm 和 ruby's bundler 的強(qiáng)烈啟發(fā)。而當(dāng)時 PHP 下并沒有類似的工具。
composer可以做什么
Composer 將這樣為你解決問題:
- 你有一個項(xiàng)目依賴于若干個庫。
- 其中一些庫依賴于其他庫。
- 你聲明你所依賴的東西。
- Composer 會找出哪個版本的包需要安裝,并安裝它們(將它們下載到你的項(xiàng)目中)。
系統(tǒng)學(xué)習(xí)composer的使用請移步 composer中文學(xué)習(xí)
開發(fā)自己的composer組件
要點(diǎn):理解composer如何實(shí)現(xiàn)自動加載第三方組件; 理解psr-0和psr-4的規(guī)范; 理解基于psr-0,psr-4,classmap,files如何實(shí)現(xiàn)自動加載。 理解Composer和Packagist
關(guān)于安裝和使用composer請參考composer中文學(xué)習(xí)
創(chuàng)建目錄名稱
mkdir try-make-package cd try-make-package這個try-make-package文件夾就是你的包的根目錄了,你只需要記住composer.json在包的哪個目錄下面,一般那就是包的根目錄了。
現(xiàn)在我們還沒有composer.json文件,下面我們來初始化
初始化擴(kuò)展包
? composer initWelcome to the Composer config generatorThis command will guide you through creating your composer.json config.Package name (<vendor>/<name>) [lingan/try-make-package]: Description []: try make a package Author [saboran <saboran@163.com>, n to skip]: Minimum Stability []: dev Package Type (e.g. library, project, metapackage, composer-plugin) []: library License []: MITDefine your dependencies.Would you like to define your dependencies (require) interactively [yes]? n Would you like to define your dev dependencies (require-dev) interactively [yes]? n{"name": "lingan/try-make-package","description": "try make a package","type": "library","license": "MIT","authors": [{"name": "saboran","email": "saboran@163.com"}],"minimum-stability": "dev","require": {} }Do you confirm generation [yes]? yes經(jīng)過一番上面的掙扎在當(dāng)前目錄就生成了composer.json文件,下面我們對這個文件進(jìn)行一些修改
修改composer.json增加自動加載規(guī)范(命名空間和目錄映射關(guān)系)和環(huán)境要求
{"name": "lingan/try-make-package","description": "try make a package","type": "library","license": "MIT","authors": [{"name": "saboran","email": "saboran@163.com"}],"minimum-stability": "dev","require": {"php": ">=7.0"},"autoload": {"psr-4": {"Flower\\Rose\\": "src/Flower/Rose","Flower\\Lily\\": "src/Flower/Lily"}} }創(chuàng)建類文件
根據(jù)上面的命名空間和目錄的映射關(guān)系,創(chuàng)建對應(yīng)目錄和文件,如下圖
對應(yīng)文件內(nèi)容
<?php /*** Created by PhpStorm.* User: Lingan* Date: 2017/11/6* Time: 21:39*/namespace Flower\Rose;class Rose {public function desc(){echo "this is rose flower";} } <?php /*** Created by PhpStorm.* User: Lingan* Date: 2017/11/6* Time: 21:38*/namespace Flower\Lily;class Lily {public function desc(){echo "this is lily flower";} }測試安裝
以上代碼都梳理完畢后,需要composer install來測試我們的包是否可以正常工作此時會在vendor/composer/autoload_psr4.php中生成命名空間和目錄的映射關(guān)系,被包在一個數(shù)組中:
<?php// autoload_psr4.php @generated by Composer$vendorDir = dirname(dirname(__FILE__)); $baseDir = dirname($vendorDir);return array('Flower\\Rose\\' => array($baseDir . '/src/Flower/Rose'),'Flower\\Lily\\' => array($baseDir . '/src/Flower/Lily'), );增加.gitignore為git忽略一些文件,增加readme.md為項(xiàng)目增加描述
.idea vendor/ composer.lock提交代碼到github
現(xiàn)在自己的Github主頁上創(chuàng)建一個新的倉庫然后將項(xiàng)目提交到對應(yīng)倉庫,參考如下
git init git add -A git commit -am "init && dev package" git remote add origin git@github.com:linganmin/try-make-package.git git push -u origin master
登錄自己的packagist submit(自己注冊)
將自己的項(xiàng)目地址粘貼
點(diǎn)擊check,然后點(diǎn)擊submit,至此,自己的composer包就提交成功了,
測試使用自己開發(fā)的包擴(kuò)展[2017.11.07更新]
- 創(chuàng)建測試目錄
- 安裝自己的擴(kuò)展
- 安裝完成的目錄如下圖
- 查看autoload_psr4.php
- 新建首頁入口文件index.php,開始測試自己寫的包
- 執(zhí)行
* 至此說明我們自己開發(fā)的擴(kuò)展包可以正常使用
設(shè)置Packagist上自動更新擴(kuò)展包,即當(dāng)我們更新擴(kuò)展包提交到GitHub時,Packagist自動更新
在沒有設(shè)置自動更新時,Packagist上包詳情頁會有這樣一個提示
This package is not auto-updated. Please set up the GitHub Service Hook for Packagist so that it gets updated whenever you push!(這個軟件包不是自動更新的。請為Packagist 設(shè)置GitHub服務(wù)鉤,以便在您推送時更新!)
詳細(xì)設(shè)置自動更新軟件包的文檔地址
簡化步驟如下:
結(jié)束語
作為一枚渣渣,發(fā)現(xiàn)自己的不足,嘗試接觸更多新技術(shù)和工具,以上文字若有錯誤歡迎指正
Happy Coding
總結(jié)
以上是生活随笔為你收集整理的学习开发自己的composer包,并使用GitHub实时更新到Packagist的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OpenStack安装过程备忘
- 下一篇: Hadoop源代码eclipse编译指南