摘要:本文參考超哥寫的基于的模塊化開發(fā)的詳細(xì)實(shí)踐版。包本地開發(fā)本地開發(fā)一個(gè)包做法基本與包開發(fā)一樣,簡(jiǎn)單過一下吧。首先創(chuàng)建一個(gè)新的項(xiàng)目在項(xiàng)目中創(chuàng)建如下目錄為我們要發(fā)布的包,對(duì)應(yīng)為,對(duì)應(yīng)為項(xiàng)目名。
本文參考超哥寫的 基于 Composer 的 PHP 模塊化開發(fā) 的詳細(xì)實(shí)踐版。
開發(fā)痛點(diǎn)
我相信很多人,對(duì) composer 不了解,在開發(fā)包的時(shí)候會(huì)這樣做:
創(chuàng)建項(xiàng)目(jcc/new-package) -> 寫業(yè)務(wù)邏輯 -> push 到代碼倉庫 -> 創(chuàng)建調(diào)試項(xiàng)目 -> 安裝包(composer require jcc/new-package -vvv) -> 調(diào)試 -> 修改項(xiàng)目 -> push 更新代碼 -> 在調(diào)試項(xiàng)目中更新包代碼 (composer update -vvv) -> ...
由此可見,不斷重復(fù)的提交代碼,更新代碼,非常的麻煩,而且不能實(shí)時(shí)調(diào)試。
本文主要解決的問題:
本地開發(fā)包時(shí),可本地測(cè)試,不需將代碼提交到第三方代碼倉庫,再 composer require 安裝到項(xiàng)目中測(cè)試:
創(chuàng)建項(xiàng)目(jcc/new-package) -> 寫業(yè)務(wù)邏輯 -> 創(chuàng)建調(diào)試項(xiàng)目 -> 配置 composer.json -> 調(diào)試 -> 修改項(xiàng)目 -> 直接在調(diào)試項(xiàng)目調(diào)試 -> ...
由此可見,本地開發(fā)可減少 git 提交拉取代碼的時(shí)間,降低了提交的每一個(gè)版本盡可能出現(xiàn)的低級(jí)錯(cuò)誤。
本地包開發(fā)的工作原理:
Composer 將本地開發(fā)的包通過軟連接的方式,從新項(xiàng)目( jcc/taxi )軟連接到調(diào)試項(xiàng)目( jcc/test-taxi/vendor/jcc/texi )
Composer 包本地開發(fā)主要用到了 repositories 的 path 類型,更新信息請(qǐng)移步 文檔
首先我們看一下 Composer 安裝包的結(jié)構(gòu),正常使用的情況下,拿一個(gè)安裝好 laravel/laravel)為例子,打開 vendor 目錄下的 laravel 會(huì)看到以下的結(jié)構(gòu):
vendor/laravel ├── framework │?? └── src │?? └── Illuminate │?? └── ... └── tinker └── src └── Console
同時(shí)看一下 Laravel 項(xiàng)目下的 composer.json 文件的 require 或 require-dev 的依賴包:
{ ..., "require": { "php": ">=7.0.0", "fideloper/proxy": "~3.3", "laravel/framework": "5.5.*", "laravel/tinker": "~1.0" }, ... }
由此可以知道目錄結(jié)構(gòu)是對(duì)應(yīng)關(guān)系的。
創(chuàng)建目錄并初始化當(dāng)然在初始化創(chuàng)建目錄的時(shí)候,要注意項(xiàng)目名跟目錄結(jié)構(gòu)一致,例如我的新項(xiàng)目叫 jcc/taxi 那么我創(chuàng)建的目錄結(jié)構(gòu)應(yīng)該這樣子:
jcc └── taxi
接著我們需要在 taxi 下進(jìn)來進(jìn)一步的開發(fā),當(dāng)然,在開發(fā)前需要先初始化 composer 配置,在 taxi 目錄下運(yùn)行:
composer init
按照指示填寫信息即可:
在 texi 目錄下會(huì)多出 composer.json 文件:
{ "name": "jcc/taxi", "description": "This is a test.", "type": "library", "license": "MIT", "authors": [ { "name": "jcc", "email": "changejian@gmail.com" } ], "minimum-stability": "dev", "require": {} }創(chuàng)建開發(fā)目錄并設(shè)置必要信息
一般情況下,我們會(huì)創(chuàng)建 2 個(gè)目錄,一個(gè)是 src 用于存放包所有的邏輯代碼,一個(gè)是 tests 用于存放測(cè)試用例:
jcc/taxi ├── src ├── tests ├── README.md ├── composer.json └── LICENSE
要注意的是,我們需要再 composer.json 設(shè)置一下 composer 自動(dòng)加載配置,在 composer.json 加入:
{ ..., "autoload": { "psr-4": { "JccTaxi": "src/" } }, "autoload-dev": { "psr-4": { "JccTaxiTests": "tests/" } }, ... }
創(chuàng)建測(cè)試包項(xiàng)目更多可以看一下 Composer 自動(dòng)加載文檔
首先,在 jcc 目錄下創(chuàng)建一個(gè)新的項(xiàng)目,用于測(cè)試:
jcc ├── taxi └── test-taxi
接著初始化 composer 配置,生成 composer.json 文件:
composer init
然后添加 Repositories 項(xiàng)目,有兩種方式:
第一種:直接運(yùn)行命令
composer config repositories.jcc path /Users/jiajianchan/Sites/jcc/taxi
第二種:直接在 composer.json 文件添加:
{ ..., "repositories": { "jcc": { "type": "path", "url": "/Users/jiajianchan/Sites/jcc/taxi" } } }
type 類型為 path,url 為項(xiàng)目的相對(duì)路徑.
接下來就是添加依賴,同樣有兩種方式:
Shell:
composer require jcc/taxi:dev-master -vvv
composer.json 中添加:
{ ..., "require": { "jcc/taxi": "dev-master" }, ... }
開發(fā)以及測(cè)試當(dāng)然要注意版本號(hào),必須在 jcc/taxi 項(xiàng)目中的 composer.json 中設(shè)置 minimum-stability 屬性,不然在安裝包的時(shí)候會(huì)報(bào)找不到版本號(hào)的錯(cuò)。
首先在 jcc/taxi 項(xiàng)目下的 src 中創(chuàng)建 Client.php 文件:
a = $a; $this->b = $b; } public function addTogether() { return $this->a + $this->b; } }
在 jcc/test-taxi 目錄下安裝一下 jcc/taxi 項(xiàng)目后,添加 test.php 文件:
// 引入 composer 自動(dòng)加載文件 require __DIR__ . "/vendor/autoload.php" $client = new JccTaxiClient(5, 1); echo $client->addTogether() . " ";
最后,在 jcc/test-taxi 目錄下運(yùn)行 test.php 文件,即可得出相加的結(jié)果:
php test.php
如果你細(xì)心點(diǎn),會(huì)發(fā)現(xiàn),jcc/test-taxi 的 vendor 目錄下的 jcc/taxi 依賴項(xiàng)目是一個(gè) 軟連接。也就是說,你在 jcc/taxi 中的 Client.php 文件添加一個(gè)新方法,然后在 jcc/test-taxi 項(xiàng)目中調(diào)用即可,不需要重新 composer update 包哦。非常方便。
Laravel 包本地開發(fā)本地開發(fā)一個(gè) Laravel 包做法基本與 Composer 包開發(fā)一樣,簡(jiǎn)單過一下吧。
首先創(chuàng)建一個(gè)新的 Laravel 項(xiàng)目:
composer create-project laravel/laravel laravel -vvv
在 Laravel 項(xiàng)目中創(chuàng)建如下目錄:
laravel ├── app ├── ... └── packages └── jcc └── taxi ├── LICENSE ├── README.md ├── composer.json ├── src │?? ├── Taxi.php │?? └── TaxiServiceProvider.php └── tests
jcc/taxi (vendor/name) 為我們要發(fā)布的 Laravel 包,jcc 對(duì)應(yīng)為 github username,taxi 對(duì)應(yīng)為 項(xiàng)目名。
首先初始化 composer 配置,這個(gè)跟正常包開發(fā)沒區(qū)別,然后在 jcc/taxi 下的 src 目錄創(chuàng)建 TaxiServiceProvider.php 文件:
app->singleton("taxi", function () { return new Taxi; }); } }
創(chuàng)建 Taxi.php 文件:
最后就是想包注冊(cè)到 laravel 項(xiàng)目中,在 config/app.php 添加:
return [ ..., "providers" => [ ..., JccTaxiTaxiServiceProvider::Class, ], ];修改 laravel 項(xiàng)目下的 composer.json 文件:
{ ..., "autoload": { ..., "psr-4": { ..., "JccTaxi": "packages/jcc/taxi/src/" } }, ... }并運(yùn)行命令:
composer dump-autoload最后在 web.php 中修改一下:
Route::get("/", function () { app("taxi")->printRunning(); });此時(shí),我們?cè)L問 laravel 項(xiàng)目的主頁時(shí),會(huì)顯示 running 這個(gè)單詞,則恭喜你,成功了。
開發(fā)一個(gè)包說難不難,說易也不易,最重要的是你需要有源源不斷的創(chuàng)造力!
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/25758.html
摘要:廢話不多說,下面我簡(jiǎn)單介紹一下兩個(gè)包的用法吧。還有的是這里使用了,如何去理解以及更好地使用最后,當(dāng)然是要感謝超哥。經(jīng)討論更名為更名為更名為更名為 showImg(https://pigjian.com/storage/post_img/2017-04-12/follow-vote.png); 本文主要介紹兩個(gè)包: Laravel - Follow : https://github.co...
摘要:現(xiàn)在已經(jīng)有了很多,關(guān)于如何開發(fā)擴(kuò)展包的文章。提交代碼到首先,需要把擴(kuò)展包的代碼提交到上,記錄下版本庫的地址,注意是。填寫完畢,提交后,記得測(cè)試一次,完成首次同步,成功會(huì)提示信息。 現(xiàn)在已經(jīng)有了很多,關(guān)于如何開發(fā) Laravel 擴(kuò)展包的文章。但是大多文章寫的太過片面,不夠完整,而且我在實(shí)際進(jìn)行開發(fā)擴(kuò)展包的時(shí)候,還是遇到了很多的問題,我把自己的開發(fā)經(jīng)驗(yàn),以及遇到的問題記錄下來,分享給大家...
使用場(chǎng)景 在引用第三方包的時(shí)候,對(duì)第三方包有改動(dòng)需求,需要將代碼放在自己的倉庫;并且自己的其他項(xiàng)目也有需求引用自定義的第三方包;甚至自己會(huì)發(fā)布修改后的第三方包; 讀完本文你講獲得: Git Submodule的基本使用 從本地加載第三方包 從自定義倉庫地址獲取擴(kuò)展包 快速創(chuàng)建第三方包 本文是在我自己想要?jiǎng)?chuàng)建一個(gè)基礎(chǔ)第三方包的時(shí)候記錄下的操作步驟 1、利用git submoudle在已有項(xiàng)目中使...
摘要:我是直接從開始學(xué)習(xí)的,所以之前版本并未考慮。我在上用的是和一個(gè)本地,并未做很多環(huán)境配置,只是簡(jiǎn)單開始。如果更有興趣的,可以使用官方推薦使用的本地開發(fā)環(huán)境,不污染本地系統(tǒng),放上安裝教程地址網(wǎng)上有很棒很簡(jiǎn)單地環(huán)境搭建工具如 我是直接從laravel5.1開始學(xué)習(xí)的,所以之前版本并未考慮。 我在mac上用的是composer、phpstorm 和一個(gè)本地mysql,并未做很多環(huán)境配置,只是...
摘要:自動(dòng)代碼擴(kuò)展開發(fā)時(shí)遵守的代碼風(fēng)格是項(xiàng)目開發(fā)規(guī)范。遵照此規(guī)范,在實(shí)際操作中,有許多重復(fù),接下來推薦一款專為此規(guī)范量身定制的代碼生成器??梢岳么藬U(kuò)展來快速構(gòu)建項(xiàng)目原型。后續(xù)還會(huì)為大家?guī)硪恍┳钚碌募夹g(shù)擴(kuò)展。 whoops 錯(cuò)誤提示擴(kuò)展 whoops 是一個(gè)非常優(yōu)秀的 PHP Debug 擴(kuò)展,它能夠使你在開發(fā)中快速定位出錯(cuò)的位置。laravel默認(rèn)安裝。showImg(https://s...
閱讀 1855·2021-11-11 16:55
閱讀 2654·2021-08-27 13:11
閱讀 3690·2019-08-30 15:53
閱讀 2360·2019-08-30 15:44
閱讀 1477·2019-08-30 11:20
閱讀 1098·2019-08-30 10:55
閱讀 989·2019-08-29 18:40
閱讀 3110·2019-08-29 16:13