Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Files listed in autoload['files'] error with Class not found in 2.2.0 #10383

Closed
reece-oliver opened this issue Dec 22, 2021 · 6 comments
Closed

Comments

@reece-oliver
Copy link

reece-oliver commented Dec 22, 2021

My composer.json:

  "autoload": {
    "classmap": [
      "scripts/composer/ScriptHandler.php"
    ],
    "files": [
      "load.environment.php"
    ]
  },

I am requiring:

"vlucas/phpdotenv": "^5.1",

When I run this command:

composer update

I get the following output:

PHP Fatal error:  Uncaught Error: Class 'Dotenv\Dotenv' not found in /Users/reeceoliver/Documents/ghe/apimesh/devportal-apim-profile/build/devportal/load.environment.php:16
Stack trace:
#0 phar:///Users/reeceoliver/Documents/ghe/apimesh/devportal-apim-profile/build/composer.phar/src/Composer/Autoload/AutoloadGenerator.php(1422): require()
#1 phar:///Users/reeceoliver/Documents/ghe/apimesh/devportal-apim-profile/build/composer.phar/src/Composer/Plugin/PluginManager.php(249): Composer\Autoload\composerRequire('d511210698f02d8...', 'load.environmen...')
#2 phar:///Users/reeceoliver/Documents/ghe/apimesh/devportal-apim-profile/build/composer.phar/src/Composer/Installer/PluginInstaller.php(79): Composer\Plugin\PluginManager->registerPackage(Object(Composer\Package\CompletePackage), true)
#3 [internal function]: Composer\Installer\PluginInstaller->Composer\Installer\{closure}(NULL)
#4 phar:///Users/reeceoliver/Documents/ghe/apimesh/devportal-apim-profile/build/composer.phar/vendor/react/promise/src/React/Promise/FulfilledPromise.php in /Users/reeceoliver/Documents/ghe/apimesh/devportal-apim-profile/build/devportal/load.environment.php on line 16

Fatal error: Uncaught Error: Class 'Dotenv\Dotenv' not found in /Users/reeceoliver/Documents/ghe/apimesh/devportal-apim-profile/build/devportal/load.environment.php:16
Stack trace:
#0 phar:///Users/reeceoliver/Documents/ghe/apimesh/devportal-apim-profile/build/composer.phar/src/Composer/Autoload/AutoloadGenerator.php(1422): require()
#1 phar:///Users/reeceoliver/Documents/ghe/apimesh/devportal-apim-profile/build/composer.phar/src/Composer/Plugin/PluginManager.php(249): Composer\Autoload\composerRequire('d511210698f02d8...', 'load.environmen...')
#2 phar:///Users/reeceoliver/Documents/ghe/apimesh/devportal-apim-profile/build/composer.phar/src/Composer/Installer/PluginInstaller.php(79): Composer\Plugin\PluginManager->registerPackage(Object(Composer\Package\CompletePackage), true)
#3 [internal function]: Composer\Installer\PluginInstaller->Composer\Installer\{closure}(NULL)
#4 phar:///Users/reeceoliver/Documents/ghe/apimesh/devportal-apim-profile/build/composer.phar/vendor/react/promise/src/React/Promise/FulfilledPromise.php in /Users/reeceoliver/Documents/ghe/apimesh/devportal-apim-profile/build/devportal/load.environment.php on line 16

And I expected this to happen:

If I downgrade from the new 2.2.0 release all works fine and command runs fine. Seems to do with something with files trying to be required before autoload now? Not 100% sure but definitely a regression from the previous release

@reece-oliver
Copy link
Author

load.environment.php looks like

<?php

/**
 * This file is included very early. See autoload.files in composer.json and
 * https://getcomposer.org/doc/04-schema.md#files
 */

use Dotenv\Dotenv;

/**
 * Load any .env file. See /.env.example.
 *
 * Drupal has no official method for loading environment variables and uses
 * getenv() in some places.
 */
$dotenv = Dotenv::createUnsafeImmutable(__DIR__);
$dotenv->safeLoad();

@stof
Copy link
Contributor

stof commented Dec 22, 2021

@Seldaek I think the files of the root package should not be loaded when registering the autoloader for plugins, because the dependencies of the root package are not yet installed (for downloaded packages, we ensure that we install a package after its dependencies)

@stof
Copy link
Contributor

stof commented Dec 22, 2021

@reece-oliver workaround until the fix is done in composer: wrap the code in a class_exists check.

@Robvdhout
Copy link

Preventing self-update with composer self-update 2.1.14 also works for now

@fritzmg
Copy link
Sponsor

fritzmg commented Dec 22, 2021

Same issue in contao/contao/contao/core-bundle for instance:

Run composer install --no-interaction --no-progress
  composer install --no-interaction --no-progress
  shell: /bin/bash -e {0}
For additional security you should declare the allow-plugins config with a list of packages names that are allowed to run code. See https://getcomposer.org/allow-plugins
You have until July 2022 to add the setting. Composer will then switch the default behavior to disallow all plugins.
PHP Fatal error:  Uncaught Error: Class 'Patchwork\Utf8\Bootup' not found in /home/runner/work/contao/contao/core-bundle/src/Resources/functions/utf8_bootup.php:11

Stack trace:
Fatal error: Uncaught Error: Class 'Patchwork\Utf8\Bootup' not found in /home/runner/work/contao/contao/core-bundle/src/Resources/functions/utf8_bootup.php:11
#0 phar:///usr/local/bin/composer/src/Composer/Autoload/AutoloadGenerator.php(1422): require()
Stack trace:
#1 phar:///usr/local/bin/composer/src/Composer/Plugin/PluginManager.php(249): Composer\Autoload\composerRequire()
#0 phar:///usr/local/bin/composer/src/Composer/Autoload/AutoloadGenerator.php(1422): require()
#2 phar:///usr/local/bin/composer/src/Composer/Plugin/PluginManager.php(474): Composer\Plugin\PluginManager->registerPackage()
#1 phar:///usr/local/bin/composer/src/Composer/Plugin/PluginManager.php(249): Composer\Autoload\composerRequire()
#3 phar:///usr/local/bin/composer/src/Composer/Plugin/PluginManager.php(104): Composer\Plugin\PluginManager->loadRepository()
#2 phar:///usr/local/bin/composer/src/Composer/Plugin/PluginManager.php(474): Composer\Plugin\PluginManager->registerPackage()
#4 phar:///usr/local/bin/composer/src/Composer/Factory.php(439): Composer\Plugin\PluginManager->loadInstalledPlugins()
#3 phar:///usr/local/bin/composer/src/Composer/Plugin/PluginManager.php(104): Composer\Plugin\PluginManager->loadRepository()
#5 phar:///usr/local/bin/composer/src/Composer/Factory.php(643): Composer\Factory->createComposer()
#4 phar:///usr/local/bin/composer/src/Composer/Factory.php(439): Composer\Plugin\PluginManager->loadInstalledPlugins()
#6 phar:///usr/local/bin/composer/src/Composer/Console/Application.php(444): Composer\Factory::create()
#5 phar:///usr/local/bin/composer/src/Composer/Factory.php(643): Composer\Factory->createComposer()
#7 phar:///usr/local/bin/composer/src/Composer/Command/BaseCommand.php(65): Comp in /home/runner/work/contao/contao/core-bundle/src/Resources/functions/utf8_bootup.php on line 11
#6 phar:///usr/local/bin/composer/src/Composer/Console/Application.php(444): Composer\Factory::create()
#7 phar:///usr/local/bin/composer/src/Composer/Command/BaseCommand.php(65): Comp in /home/runner/work/contao/contao/core-bundle/src/Resources/functions/utf8_bootup.php on line 11
Error: Process completed with exit code 255.

I think this is a regression caused by #10279

@Seldaek
Copy link
Member

Seldaek commented Dec 22, 2021

Closing as duplicate of #10382

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants