簡體   English   中英

從包含的 package 發布配置和遷移到 Laravel

[英]Publishing config and migrations from included package in Laravel

我正在使用 Laravel 構建一個 package,它將包含一些管理功能,並將包含一些其他包。

我已經包含了一個 package,它有遷移和一個配置文件,但是我如何將它們復制到 Laravel 中的正確文件夾中。package 有它自己的 ServiceProvider,但是我如何從我的 package 中調用它?

我正在使用以下內容在我的 package 中注冊 package。

class CldServiceProvider extends ServiceProvider {

    public function register()
    {
       $this->app->register(MediaLibraryServiceProvider::class);
    }
}

我試過了

php artisan vendor:publish 

但它說沒有什么可發布的。 因為它只查看這個 Laravel 安裝的包,而不是嵌套的包。

嘗試單獨發布配置並使用強制開關

php artisan vendor:publish --tag=config --force

正如@scrubmx所提到的,您需要包括定義可以發布內容的代碼,盡管該代碼不應真正包含在您自己的服務提供程序中,而應包含在您所包含的其他程序包中。 如果它似乎沒有此代碼,則最好將其列為該軟件包存儲庫中的問題,或創建一個添加它的拉取請求。

在 package 根文件夾中創建database/migrations文件夾。 然后在您的服務提供商的啟動方法中添加發布詳細信息。

final class MyPackageServiceProvider extends BaseServiceProvider
{
    public function boot(): void
    {
        $this->publishes([
            __DIR__ . '/../database/migrations/' => database_path('migrations/my-package'),
        ], 'my-package-migrations');
    }
}

第二部分可能類似於database_path('migrations')database_path('migrations/my-package') 我建議使用子文件夾,因為如果有很多包, migrations文件夾會增長太多。

'my-package-migrations'部分是我們的標簽。 並運行帶有標簽的發布命令。

php artisan vendor:publish --tag=my-package-migrations

如果您使用子文件夾php artisan migrate命令將不起作用,因為我們需要像這樣指定到確切的遷移文件夾,

php artisan migrate --path=/database/migrations/my-package

是的,這看起來有點臟,但可以整理電纜。 並且不要忘記使用composer dump-autoload 如果服務提供商已注冊,則此解決方案有效。 此外,您可以將此方法用於配置,但配置文件夾不支持子文件夾。

我認為您已經自己發布了配置文件

$this->publishes([
    'other-package/absolute/path/some-config.php' => config_path('my-package.php'),
]);

我在正在處理的當前項目中包含了/ packages /文件夾。 問題是當在我的composer.json中包含該軟件包時

現在可以從我的項目中的2個位置(供應商文件夾和package文件夾中)訪問它。 這是造成問題的

我將軟件包移到當前項目之外,這解決了該問題。

就我而言,我發現我需要在正在處理的應用程序中包括我的軟件包。 我遵循的原始教程未包含此步驟。

因此,在主應用程序的composer.json中:

"repositories": [
    {
        "type": "path",
        "url": "packages/namespace/name",
        "options": {
            "symlink": true
        }
    }
],
"require": {
    // ...
    "namespace/name": "dev-master"
},

然后我們從主文件夾運行以下命令:

composer update

之后,運行php artisan vendor:publish將包括發布子軟件包的選項。

注意:此信息的來源是: https : //laraveldaily.com/how-to-create-a-laravel-5-package-in-10-easy-steps/

發布供應商遷移:

php artisan vendor:publish --tag=migration

發布供應商配置:

php artisan vendor:publish --tag=config

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM