wp-cli / autoload-splitter

MIT License
3 stars 3 forks source link

Composer interference with autoloading #10

Closed AaronHolbrook closed 6 years ago

AaronHolbrook commented 6 years ago

I am running into an issue with WP CLI and composer.

It appears to be due to WP CLI now utilizing composer prior to loading the WP application logic. More specifically, as I am using composer myself in my application logic to load and handle my own dependencies, when it comes time to call upon a class that should be auto-loadable it fatals out as it is unable to find it.

Steps to reproduce:

  1. In wp-content/ create a composer.json file with the following:

    {
    "config": {
        "preferred-install": "dist",
        "vendor-dir": "mu-plugins/app/vendor"
    },
    "extra": {
        "installer-paths": {
            "mu-plugins/{$name}/": [
                "type:wordpress-muplugin"
            ]
        }
    },
    "require": {
        "php": ">=5.5",
        "composer/installers": "~1.0.12",
        "arrilot/dotenv-php": "^1.0"
    }
    }
  2. In wp-content/mu-plugins/ create the directory app and a file inside app.php with the following:

<?php
require_once __DIR__ . '/vendor/autoload.php';
/**
 * Load dotenv if .env file is present
 */
$vars = Arrilot\DotEnv\DotEnv::all();
  1. Load mu-plugins/app/app.php by creating a load.php in mu-plugins/load.php with the following:

    <?php
    require_once __DIR__ . '/app/app.php';
  2. Run composer update at the wp-content/ directory path.

  3. Load the site in a browser, see that it loads correctly/fine and properly executes the app.php logic.

  4. Attempt to run wp on the same site, and see that it fatals on the Arrilot\DotEnv\DotEnv load attempt:

Fatal error: Uncaught Error: Class 'Arrilot\DotEnv\DotEnv' not found in /var/www/html/sites/wordpress/htdocs/wp-content/mu-plugins/app/app.php:8
Stack trace:
#0 /var/www/html/sites/wordpress/htdocs/wp-content/mu-plugins/load.php(2): require_once()
#1 /var/www/html/sites/wordpress/htdocs/wp-settings.php(260): include_once('/var/www/html/s...')
#2 phar:///usr/local/bin/wp/php/WP_CLI/Runner.php(1105): require('/var/www/html/s...')
#3 phar:///usr/local/bin/wp/php/WP_CLI/Runner.php(1032): WP_CLI\Runner->load_wordpress()
#4 phar:///usr/local/bin/wp/php/WP_CLI/Bootstrap/LaunchRunner.php(23): WP_CLI\Runner->start()
#5 phar:///usr/local/bin/wp/php/bootstrap.php(75): WP_CLI\Bootstrap\LaunchRunner->process(Object(WP_CLI\Bootstrap\BootstrapState))
#6 phar:///usr/local/bin/wp/php/wp-cli.php(23): WP_CLI\bootstrap()
#7 phar:///usr/local/bin/wp/php/boot-phar.php(8): include('phar:///usr/loc...')
#8 /usr/local/bin/wp(4): include('phar:///usr/loc...')
#9 {main}
  thrown in /var/www/html/sites/wordpress/htdocs/wp-content/mu-plugins/app/app.php on line 8
AaronHolbrook commented 6 years ago

Sorry, meant to create this issue on the main wp-cli repo.