Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Laravel Package Manager Laravel Package

patinthehat/laravel-package-manager

View on GitHub
Deep Wiki
Context7

Getting Started

Minimal Steps

  1. Installation:

    composer require patinthehat/laravel-package-manager
    

    Add the service provider to config/app.php:

    'providers' => [
        // ...
        LaravelPackageManager\LaravelPackageManagerServiceProvider::class,
    ],
    
  2. First Use Case: Install and register a package (e.g., spatie/laravel-permission) with all dependencies:

    artisan package:require spatie/laravel-permission
    

    This runs composer require and auto-registers providers/facades from the package’s composer.json.


Implementation Patterns

Core Workflows

  1. Package Installation & Registration:

    • Use package:require for production (--dev flag for dev-only):
      artisan package:require vendor/package --dev
      
    • Skips Composer if only registering existing packages:
      artisan package:require vendor/package --register-only
      
  2. Cleanup:

    • Unregister providers/facades without deleting the package:
      artisan package:unregister vendor/package
      
    • Interactive prompts confirm each unregistration (safe for partial cleanup).
  3. Integration with CI/CD:

    • Script package:require in deployment pipelines to ensure consistent package registration across environments.

Advanced Patterns

  • Custom Package Metadata: Extend the package’s composer.json to define custom registration logic via the extra.laravel-package-manager key (e.g., for conditional providers).

  • Post-Install Hooks: Use Laravel’s booted event in a package’s service provider to trigger actions after registration:

    public function boot()
    {
        if (app()->environment('local')) {
            // Local-only setup
        }
    }
    
  • Dependency Management: Chain package:require commands to install multiple packages atomically:

    artisan package:require package1 && artisan package:require package2
    

Gotchas and Tips

Pitfalls

  1. Provider/Facade Conflicts:

    • Registering a package with duplicate providers/facades (e.g., two packages defining App\Services\FooService) may cause runtime errors. Use --register-only to debug conflicts manually.
  2. Composer Autoloader Cache:

    • After package:require, clear Composer’s autoloader cache if classes aren’t found:
      composer dump-autoload
      
  3. Dev vs. Prod Dependencies:

    • Forgetting --dev for development-only packages (e.g., laravel/tinker) will fail in production builds.

Debugging

  • Verbose Output: Use -v flag for detailed logs:
    artisan package:require vendor/package -v
    
  • Dry Runs: Check composer.json changes before installing:
    composer require vendor/package --dry-run
    

Extension Points

  1. Custom Commands: Extend the package by publishing its config and creating custom Artisan commands:

    php artisan vendor:publish --provider="LaravelPackageManager\LaravelPackageManagerServiceProvider"
    
  2. Package-Specific Logic: Override the default registration behavior by binding a custom PackageManager instance:

    $this->app->bind(
        LaravelPackageManager\Contracts\PackageManager::class,
        CustomPackageManager::class
    );
    
  3. Environment-Specific Registration: Use Laravel’s whenIs() or unlessIs() in service providers to conditionally register based on environment variables.

Tips

  • Backup config/app.php: Before bulk-registering packages, backup config/app.php to revert manual changes if needed.
  • Leverage composer.json: Define package-specific metadata in extra.laravel-package-manager to control registration behavior:
    {
        "extra": {
            "laravel-package-manager": {
                "providers": ["App\\Providers\\CustomProvider"],
                "facades": ["App\\Facades\\CustomFacade"]
            }
        }
    }
    
  • Combine with laravel-zero: For CLI tools, use package:require to install dependencies without a full Laravel install:
    composer require patinthehat/laravel-package-manager --dev
    
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
jayeshmepani/jpl-moshier-ephemeris-php
elnasnato/laraliveui
labrodev/rest-sdk
sampaui/sampaui
babelqueue/php-sdk
facebook/capi-param-builder-php
babelqueue/symfony
hamzi/corewatch
minionfactory/raw-hydrator
hexters/coinpayment
rjcodes/rjcms
act-training/laravel-permissions-manager
alimarchal/laravel-chart-of-accounts
babenkoivan/elastic-scout-driver
mkwebdesign/filament-watchdog-v5
renatomarinho/laravel-page-speed
zedmagdy/filament-business-hours
renatovdemoura/blade-elements-ui
devgeek/beacon-admin
benjamin-rqt/data-watcher-bundle