基於Composer的Laravel擴展包開發工作流

使用場景

在引用第三方包的時候,對第三方包有改動需求,需要將代碼放在自己的倉庫;並且自己的其他項目也有需求引用自定義的第三方包;甚至自己會發布修改後的第三方包;

讀完本文你講獲得:

  • 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!

其創建的目錄結構:

clipboard.png
並在composer.json以及app.php中自動添加了相關配置。
ok,接下來就可以進行擴展包的開發了!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章