dflydev/embedded-composer-core
Core library for running Composer in embedded contexts. Provides the underlying utilities and runtime pieces used by embedded-composer integrations to programmatically install, update, and manage PHP dependencies from within an application.
composer is desirable.composer.json) are tightly coupled with Composer. Embedding Composer core could enable:
Illuminate\Foundation\Composer and vendor directory may interact unpredictably with embedded Composer. Risk of namespace collisions or autoloader conflicts if not carefully isolated.Composer\DependencyResolver\ResolverSet).Composer\Repository\RepositoryManager).Composer\Semver\VersionParser).AppServiceProvider to initialize Composer core on demand.booted or registered events to trigger embedded Composer logic (e.g., resolving dependencies for a request).composer.json and vendor directory. Laravel’s existing setup may need to be shadowed or abstracted to avoid conflicts.post-install scripts). Laravel’s security layer (e.g., trustedProxies, signed routes) may need extension.| Risk Area | Description | Mitigation Strategy |
|---|---|---|
| Autoloader Conflicts | Embedded Composer may load classes that conflict with Laravel’s autoloader (e.g., Composer\Autoload\ClassLoader). |
Use a namespace prefix (e.g., Dflydev\Composer\) or isolate the Composer instance in a separate class loader. |
| Dependency Duplication | Laravel already bundles Composer; embedding it may lead to version mismatches or memory bloat. | Lazy-load the embedded Composer only when needed (e.g., in a singleton service). Use require_once to load only necessary Composer classes. |
| Performance Overhead | Composer’s resolver is CPU-intensive. Embedding it in a high-traffic Laravel app could degrade performance. | Implement caching (e.g., cache resolved dependencies in Redis) and rate-limiting (e.g., resolve dependencies only on cache misses). |
| Maintenance Burden | Composer core is a moving target. Upstream changes (e.g., breaking API updates) may break the package. | Pin to a stable Composer version (e.g., via composer.json constraints) and monitor upstream deprecations. |
| Security Risks | Embedded Composer enables arbitrary code execution (e.g., via post-install-cmd). Malicious packages could exploit this. |
Disable dangerous scripts (e.g., via config.json or environment variables) and sandbox execution (e.g., using proc_open with restricted permissions). |
| Testing Complexity | Testing embedded Composer logic requires mocking Composer’s state (e.g., repositories, versions). | Use Composer’s built-in test utilities (e.g., Composer\Test\ComposerTestCase) and dependency injection to swap out real repositories for mocks. |
Why Embed Composer?
composer install --optimize-autoloader in a pre-build step, or a custom package manager)?Scope of Embedding
vendor directory and composer.json?Performance Trade-offs
Security Model
Long-Term Viability
php artisan dflydev:resolve).Illuminate\Foundation\Application::booted).vendor directory is auto-generated by Composer. Embedding Composer may require shadowing this directory or custom paths.config('composer') may conflict with embedded Composer’s state.config/dflydev.php to manage embedded Composer settings.Proof of Concept (PoC):
dflydev/composer-embedded package).composer.json (e.g., only autoload and require sections).Incremental Integration:
Composer\Factory::create()).Dependency Isolation:
vendor-dir option to point to a custom directory (e.g., storage/composer-vendor).vendor is missing).2.4.x) to avoid breaking changes.composer.json overrides if embedding a different Composer version than Laravel’s.composer.json is minimal (avoid complex scripts or plugins).vendor directory (e.g., via COMPOSER_VENDOR_DIR env var).AppServiceProvider::boot():
use Dflydev\EmbeddedComposer\Core\Factory;
$composer = Factory::create($this->app->basePath('composer.json'), true);
$this->app->singleton('df
How can I help you explore Laravel packages today?