在引用第三方包的時候,對第三方包有改動需求,須要將代碼放在本身的倉庫;而且本身的其餘項目也有需求引用自定義的第三方包;甚至本身會發布修改後的第三方包;
本文是在我本身想要建立一個基礎第三方包的時候記錄下的操做步驟
一般利用composer安裝的包均在vendor
目錄下,而且倉庫地址均指向第三方包做者的倉庫,而這時候修改第三方包,一是沒法歸入git管理庫,二是提交pull requests
須要等待做者的審覈更新,未必會採納
> mkdir packages > git submodule add https://github.com/mpandar/laravel-packager.git packages/mpandar/laravel-packager
packages/mpandar/laravel-packager
目錄使用git的命令,提交文件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
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
能夠看到該包中的命令已經被添加
JeroenG\Packager
是用來快速建立基於laravel的擴展包,使用過程當中,發現一點小的問題,好比 php artisan packager:new mpandar laravel-cart
理想的目錄結構應該是php
packages |-mpandar |-laravel-cart |-src |-LaravelCartProvider.php |-LaravelCart.php |-Facades |-LaravelCart.php
但其實際建立的Provider卻命名爲laravel-cartProvider
,若是使用php artisan packager:new mpandar LaravelCart
,目錄名稱又會錯,因此我修復了這個問題(也多是我不會用...)laravel
// dev-master 表示取master分支 "repositories": [ { "type": "vcs", "url": "https://github.com/mpandar/laravel-packager" } ], "require": { "jeroen-g/laravel-packager": "dev-master" }, // composer update 便可
利用
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!
其建立的目錄結構:git
並在composer.json以及app.php中自動添加了相關配置。
ok,接下來就能夠進行擴展包的開發了!github