繁体   English   中英

如何修复 Composer 错误:“无法扫描目录中的类”?

[英]How to fix Composer error: "could not scan for classes inside dir"?

我正在尝试通过输入以下命令在终端中安装作曲家:

php composer.phar install

它开始安装所需的包,但我收到此错误类型:

[运行时异常]
无法扫描“app/commands”中的类,它既不是文件也不是文件夹

我怎样才能克服这个问题?

通常,当您有一些损坏的文件或任何 Composer 更新崩溃或中断时,就会发生这种情况。

要解决,只需删除供应商文件夹并运行composer install

当您安装 Laravel 时,它会创建一个

app/commands

文件夹。 看起来它不在那里。 只需创建它或从 composer.json 中删除它:

"classmap": [
    "app/commands",  /// <--- this line
],

并运行

composer update
artisan dump-autoload

最后一个类似于composer dump-autoload ,但它也做了一些 Laravel 的东西。

如果您没有任何命令,则您实际上并不需要它。 如果您打算创建工匠命令,请创建该文件夹,它应该可以工作。

我有同样的问题。 就我而言,我注意到我的 Laravel 安装中没有 app/commands 文件夹。 我创建了命令文件夹,composer dump-autoload 又开始工作了!

您应该能够通过简单地运行来解决这个问题:

rm -rf vendor/autoload.php vendor/autoload_runtime.php vendor/composer && composer install

这会清除损坏的文件,而无需删除整个vendor文件夹或清除全局缓存。

正如其他人所提到的,如果您中断正在运行的 Composer(例如, Ctrl+C 在composer update期间),通常会发生这种情况。 但它不会破坏所有文件,只会破坏作曲家的内部结构——上面的命令随后会删除这些文件。

这是一个具有有效答案的较旧问题,但有人可能会觉得这有帮助。

我的问题是我的目录路径中有App而不是app 也许这会帮助某人。

我是Windows 10上的Xampp用户。 我尝试了上述所有方法,但没有一个对我有用。 我用这种方法解决了我的问题,希望它会帮助其他人。

  1. 创建目录 C:\\bin
  2. ;C:\\bin附加到您的 PATH 环境变量( 相关帮助
  3. 下载https://phar.phpunit.de/phpunit-5.7.phar并将文件保存为C:\\bin\\phpunit.phar
  4. 打开命令行(例如,按Windows+R » 输入cmd » ENTER)
  5. 创建一个包装批处理脚本(结果在C:\\bin\\phpunit.cmd ):

     C:\\Users\\username> cd C:\\bin C:\\bin> echo @php "%~dp0phpunit.phar" %* > phpunit.cmd C:\\bin> exit
  6. 打开一个新的命令行并确认您可以从任何路径执行 PHPUnit:

     C:\\Users\\username> phpunit --version PHPUnit xyz by Sebastian Bergmann and contributors.

这个方法解决了我的问题。 希望它也能拯救你的一天。

我有同样的问题。 对我来说,它发生在我删除了一个类目录并忘记更新 composer.json 之后。

修复只是更新 composer.json 中的 classmap 数组

我认为这是因为作曲家缓存错误。 尝试清除其缓存:

composer clearcache

然后再次运行安装程序

composer create-project --prefer-dist laravel/laravel blog

当 Composer 无法自动加载 classmap 时,通常会发生这种情况。 检查文件或文件夹的位置是否正确。

这是另一个调试思路:

我不小心将vendor/文件夹添加到我的存储库中,然后部署了它。 从存储库中删除它后,错误消息composer RuntimeException Could not scan for classes inside polyfill-php80/Resources/stubs which does not appear to be a file nor a folder消失了。

在大多数情况下,这是由于复制或克隆而发生的,因此请尝试从 magento 安装中删除或重命名 VENDOR 文件夹并重新运行“composer install”。

这是由于您的 composer.lock 文件造成的。

例如,在我的情况下,我得到: Could not scan for classes inside ".../vendor/drupal/core-composer-scaffold/PEAR/" which does not appear to be a file nor a folder

该目录确实不存在。 但是,在您的 composer.lock... 'app/commands' 中搜索 'PEAR' 在这种情况下 - 您将找到模块定义:

{
            "name": "drupal/core-composer-scaffold",
            "version": "8.9.11",
            "source": {
                "type": "git",
                "url": "https://github.com/drupal/core-composer-scaffold.git",
                "reference": "c902d07cb49ef73777e2b33a39e54c2861a8c81d"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/drupal/core-composer-scaffold/zipball/c902d07cb49ef73777e2b33a39e54c2861a8c81d",
                "reference": "c902d07cb49ef73777e2b33a39e54c2861a8c81d",
                "shasum": ""
            },
            "require": {
                "php": ">=4.4.0"
            },
            "require-dev": {
                "phpunit/phpunit": "*"
            },
            "type": "class",
            "extra": {
                "branch-alias": {
                    "dev-master": "1.0.x-dev"
                }
            },
            "autoload": {
                "classmap": [
                    "PEAR/"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "include-path": [
                "."
            ],
            "license": [
                "BSD-2-Clause"
            ],
            "authors": [
                {
                    "name": "Helgi Thormar",
                    "email": "dufuz@php.net"
                },
                {
                    "name": "Greg Beaver",
                    "email": "cellog@php.net"
                }
            ],
            "description": "The PEAR Exception base class.",
            "homepage": "https://github.com/pear/PEAR_Exception",
            "keywords": [
                "exception"
            ],
            "time": "2019-12-10T10:24:42+00:00"
        },

我们的重要部分是:

"autoload": {
                "classmap": [
                    "PEAR/"
                ]
            },

Composer 正在尝试从该目录自动加载,这就是您遇到 Composer 崩溃的原因 - 该目录不存在。 在你的“应用程序/命令”的情况下可能是同样的事情。

从 composer.lock 中删除整个包 - 为清楚起见,上面发布的代码较长。 然后为该包重新运行“composer require”。 示例: composer require drupal/core-composer-scaffold

在我的情况下,我需要一个特定的版本,默认会给我版本 9,我需要 8。我的命令是composer require drupal/core-composer-scaffold:^8

完成此操作后,您的 Composer 安装将顺利运行。

就我而言,我是通过 composer 安装 wordpress 插件的,尤其是 yoast (wordpress-seo) 和 packagist.org 的 woocommerce。 我将来源更改为 wpackagist 并且它开始正常工作:

  "require": {
    "wpackagist-plugin/wordpress-seo": "dev-trunk",
    "wpackagist-plugin/woocommerce": "dev-trunk"
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM