模組化開發靜態資源對映

Kevinvinvin 發表於2019-09-11

在使用 nwidart/laravel-modules 進行模組化開發時,每個模組下都會有單獨的靜態資源(CSS、JS等)資料夾,發現包本身並沒有提供比較便利的資源引用方法。以下是用 Artisan 命令列生成軟鏈的解決辦法

生成 Command:

php artisan make:command ModuleAssetLink

app/Consoles/Commands/ModuleAssetsLink.php

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;

class ModuleAssetsLink extends Command
{
    protected $signature = 'module:assets-link 
                            {module : Module name} 
                            {link : Link name}';

    protected $description = '將模組靜態資源對映到專案 `public` 目錄';

    public function __construct()
    {
        parent::__construct();
    }

    public function handle()
    {
        $module = $this->argument('module');
        $link = $this->argument('link');

        if (file_exists(public_path($link))) {
            return $this->error("The 'public/{$link}' directory already exists.");
        }

        $this->laravel->make('files')->link(
            module_path($module) . '/Resources/assets', public_path($link)
        );

        $this->info("The [public/{$link}] directory has been linked.");
    }
}

使用:

$ php artisan module:assets-link Admin admin-assets
The [public/admin-assets] directory has been linked.

:computer: & :coffee: