【问题标题】:How to fix Composer error: "could not scan for classes inside dir"?如何修复 Composer 错误:“无法扫描目录中的类”?
【发布时间】:2014-01-02 22:49:53
【问题描述】:

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

php composer.phar install

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

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

我该如何解决这个问题?

【问题讨论】:

    标签: php terminal installation laravel-4 composer-php


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      这是由于您的 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 drupal/core-composer-scaffold

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

          这是另一个调试思路:

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

          【讨论】:

            【解决方案5】:

            这通常发生在 composer 无法自动加载 classmap 时。检查文件或文件夹的位置是否正确。

            【讨论】:

            • 这是完全正确的,尽管我的回复对如何修复它有进一步的定义。
            【解决方案6】:

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

            composer clearcache
            

            然后再次运行安装程序

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

            【讨论】:

              【解决方案7】:

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

              修复只是简单地更新 composer.json 中的类映射数组

              【讨论】:

              • 这也是正确的,尽管它并没有真正解决如何解决任何细节问题。如果你知道他的意思,它会让你到达那里。
              【解决方案8】:

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

              1. 创建目录 C:\bin
              2. ;C:\bin 附加到您的 PATH 环境变量 (related help)
              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 x.y.z by Sebastian Bergmann and contributors.
                

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

              【讨论】:

                【解决方案9】:

                这通常发生在您有一些损坏的文件或任何作曲家更新崩溃或中断时。

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

                【讨论】:

                • 这并不总是有效。我收到/vendor/seb astian/diff/src/" which does not appear to be a file nor a folder 错误并删除供应商并重新运行composer install 不起作用。手动添加文件夹的原始解决方案可以。问题是我的 CI 验证器因为这个问题在 github 中死掉了。很烦人。
                • 您是否尝试删除供应商文件夹?
                • 注意:清空文件夹是不够的,必须删除文件夹本身。发生在我身上。
                • 我同时使用这两种方法,composer clearcache && rm -rf vendor && composer install 一切都恢复正常
                • 感谢@kl3sk,但即便如此,它似乎对我不起作用
                【解决方案10】:

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

                【讨论】:

                • 是的,它区分大小写
                • 对我有用。 composer.json文件是window用户创建的,我的linux安装中composer install命令失败。
                【解决方案11】:

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

                【讨论】:

                • 如果您从版本控制系统检查您的项目,应用程序/命令文件夹通常会丢失。您必须在本地开发机器上手动重新创建它。
                • 这将解决错误,但可能无法解决实际问题。在操作的情况下,我认为这将解决它。如果自动加载器在您的 composer.lock 文件中,并且新版本的模块不再使用该自动加载器,也会发生此错误。在这种情况下,请参考我的答案。
                【解决方案12】:

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

                app/commands
                

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

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

                然后运行

                composer update
                artisan dump-autoload
                

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

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

                【讨论】:

                • Laravel 有一个 .gitkeep 文件。但作为一个空文件夹也应该工作。
                • 未安装列出的更新包“artisan”。无视。未安装列出的更新包“dump-autoload”。忽略。
                • 这实际上是错误的。虽然在其他情况下是正确的。在 op 情况下,他定义了类映射,他缺少它所指向的内容。 'app/commands' 要么是必需的——意味着 op 缺少文件,要么已被删除,但仍在安装 composer.lock 文件中,应该被删除。
                猜你喜欢
                • 2014-12-26
                • 2020-04-28
                • 2021-02-19
                • 2015-06-08
                • 2015-10-02
                • 2020-06-06
                • 1970-01-01
                • 2016-09-27
                • 1970-01-01
                相关资源
                最近更新 更多