在引用第三方包的时候,对第三方包有改动需求,须要将代码放在本身的仓库;而且本身的其余项目也有需求引用自定义的第三方包;甚至本身会发布修改后的第三方包;
本文是在我本身想要建立一个基础第三方包的时候记录下的操做步骤
一般利用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