基于Composer的Laravel扩展包开发工做流

使用场景

在引用第三方包的时候,对第三方包有改动需求,须要将代码放在本身的仓库;而且本身的其余项目也有需求引用自定义的第三方包;甚至本身会发布修改后的第三方包;

读完本文你讲得到:

  • Git Submodule的基本使用
  • 从本地加载第三方包
  • 从自定义仓库地址获取扩展包
  • 快速建立第三方包
本文是在我本身想要建立一个基础第三方包的时候记录下的操做步骤

一、利用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的命令,提交文件

二、调整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 便可

五、为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!

其建立的目录结构:git

clipboard.png
并在composer.json以及app.php中自动添加了相关配置。
ok,接下来就能够进行扩展包的开发了!github

相关文章
相关标签/搜索