bitandblack/composer-helper
Laravel-friendly Composer helper utilities that simplify common package tasks like inspecting installed packages, resolving versions, and reading composer.json/lock data. Useful for build tools, diagnostics, and automation where you need Composer metadata programmatically.
Installation Add the package to your project via Composer:
composer require bitandblack/composer-helper
No additional configuration is required unless you need custom behavior.
First Use Case
The package provides utility functions for Composer operations. Start by exploring the ComposerHelper facade:
use BitAndBlack\ComposerHelper\Facades\ComposerHelper;
// Example: Get installed packages
$packages = ComposerHelper::getInstalledPackages();
Where to Look First
BitAndBlack\ComposerHelper\Facades\ComposerHelperBitAndBlack\ComposerHelper\ComposerHelperServiceProviderREADME.md in the repository for basic usage examples.Package Management Use the helper to dynamically interact with Composer packages:
// Check if a package is installed
if (ComposerHelper::isInstalled('laravel/framework')) {
// Perform action
}
// Get package version
$version = ComposerHelper::getPackageVersion('laravel/framework');
Dependency Handling Programmatically check or modify dependencies:
// Check if a package meets version requirements
if (ComposerHelper::satisfies('monolog/monolog', '^2.0')) {
// Use Monolog v2+ features
}
Autoloading and Optimization Trigger Composer dump-autoload programmatically:
ComposerHelper::dumpAutoload();
Custom Scripts
Extend Composer scripts in composer.json using the helper:
{
"scripts": {
"post-install-cmd": [
"BitAndBlack\\ComposerHelper\\ComposerHelper::postInstall"
]
}
}
AppServiceProvider if not auto-discovered.ComposerHelper in unit tests to isolate Composer interactions.Composer Lock File Dependency
Some methods (e.g., getInstalledPackages()) rely on the composer.lock file. Ensure it’s up-to-date:
composer install --no-dev
Performance Overhead
Avoid calling getInstalledPackages() or getPackageVersion() in tight loops. Cache results if needed:
$packages = cache()->remember('composer.packages', now()->addHours(1), function () {
return ComposerHelper::getInstalledPackages();
});
Version Comparison Quirks
Use satisfies() carefully—it follows Composer’s version constraints. Test edge cases like ^1.0.0 vs >=1.0.0.
Namespace Collisions
If you have a class named ComposerHelper, the facade might conflict. Use the fully qualified class name:
\BitAndBlack\ComposerHelper\Facades\ComposerHelper::method();
ComposerHelper::setVerbose(true);
composer.json syntax if methods return unexpected results.Custom Methods Extend the helper by binding your own logic to the facade:
ComposerHelper::extend(function ($helper) {
$helper->customMethod = function () {
// Your logic
};
});
Event Listeners
Hook into Composer events (e.g., post-install) via Laravel’s event system:
ComposerHelper::listen('post-install', function () {
// Post-install logic
});
Configuration Override default behavior by publishing the config (if available) or extending the service provider:
$this->app->singleton('composer.helper', function ($app) {
return new CustomComposerHelper();
});
How can I help you explore Laravel packages today?