使用場景
在引用第三方包的時候,對第三方包有改動需求,需要將代碼放在自己的倉庫;並且自己的其他項目也有需求引用自定義的第三方包;甚至自己會發布修改後的第三方包;
讀完本文你講獲得:
- Git Submodule的基本使用
- 從本地加載第三方包
- 從自定義倉庫地址獲取擴展包
- 快速創建第三方包
本文是在我自己想要創建一個基礎第三方包的時候記錄下的操作步驟
1、利用git submoudle在已有項目中使用第三方包
通常利用composer安裝的包均在vendor
目錄下,並且倉庫地址均指向第三方包作者的倉庫,而這時候修改第三方包,一是無法納入git管理庫,二是提交pull requests
需要等待作者的審覈更新,未必會採納
1)Fork對方項目
2)下載fork後的項目到本地
> mkdir packages
> git submodule add https://github.com/mpandar/laravel-packager.git packages/mpandar/laravel-packager
3)之後可以對該包內容進行編輯,並在packages/mpandar/laravel-packager
目錄使用git的命令,提交文件
2、調整composer.json
內容,使項目能夠使用自定義包內容
composer的包自動發現機制其實就是利用的psr-4
(中文)
// autoload - psr-4 是項目主目錄src
// autoload - files 主要就是加載helper函數
// autoload-dev - psr-4 主要是test
"autoload": {
"psr-4": {
"JeroenG\\Packager\\": "packages/mpandar/laravel-packager/src"
},
"files": [
"packages/mpandar/wechat/src/Kernel/Helpers.php"
]
},
"autoload-dev": {
"psr-4": {
"JeroenG\\Packager\\Tests\\": "packages/mpandar/laravel-packager/tests"
}
},
添加完成後要運行composer dumpautoload
,否則下面添加ServiceProvider
會報錯,找不到對應ServiceProvider
3、添加包的ServiceProvider
由於laravel的package:discover
是讀取vendor/composer/installed.json
這個文件中安裝的包,而我們的包是手動添加,所以無法自動添加ServiceProvider
,手動在app.php
中添加
'providers' => [
JeroenG\Packager\PackagerServiceProvider::class,
],
'aliases' => [
'CreditsShop' => Mpandar\CreditsShop\Facades\CreditsShop::class,
],
通過 php artist list
可以看到該包中的命令已經被添加
4、其他項目使用自定義包
JeroenG\Packager
是用來快速創建基於laravel的擴展包,使用過程中,發現一點小的問題,比如 php artisan packager:new mpandar laravel-cart
理想的目錄結構應該是
packages
|-mpandar
|-laravel-cart
|-src
|-LaravelCartProvider.php
|-LaravelCart.php
|-Facades
|-LaravelCart.php
但其實際創建的Provider卻命名爲laravel-cartProvider
,如果使用php artisan packager:new mpandar LaravelCart
,目錄名稱又會錯,所以我修復了這個問題(也可能是我不會用...)
// dev-master 表示取master分支
"repositories": [
{
"type": "vcs",
"url": "https://github.com/mpandar/laravel-packager"
}
],
"require": {
"jeroen-g/laravel-packager": "dev-master"
},
// composer update 即可
5、爲Laravel開發擴展包
利用jeroen-g/laravel-packager
很容易創建一個擴展包基礎項目
> php artisan packager:new mpandar credits-shop
0/6 [>---------------------------] 0% Creating package mpandar\credits-shop...
1/6 [====>-----------------------] 16% Creating packages directory...
2/6 [=========>------------------] 33% Creating vendor...
3/6 [==============>-------------] 50% Downloading skeleton...
4/6 [==================>---------] 66% Replacing skeleton placeholders...
5/6 [=======================>----] 83% Dumping autoloads and discovering package...
Generating optimized autoload files
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover
6/6 [============================] 100% Package created successfully!
其創建的目錄結構:
並在composer.json以及app.php中自動添加了相關配置。
ok,接下來就可以進行擴展包的開發了!