作曲家抱怨没有遵守PSR-4,即使一切似乎都很好

问题描述

在我的项目中,我包括一个正在开发的软件包,该软件包具有composer.json,其中包括以下自动加载项:

(当然,请确保不会对我的公司造成麻烦)

{
    "autoload": {
        "psr-4": {
            "vendor\\Package\\": "src/Package"
        }
    }
}

主项目和程序包都有一个composer.json,这来自程序包的composer.json

我还看到了一些仅使用“ vendor \\”的示例,但这导致了完全相同的问题。

我需要版本标签上的软件包(来自git存储库),因此它应该正确获取并安装软件包。

任何时候,作曲家运行自动加载时,都会抱怨名称空间不符合PSR-4。我已经检查了全部大写的大小写。它抱怨我项目中几乎所有的PHP文件。这是文件结构的示例:

vendor
|- package
 |- src
  |- Package
   |- PackageServiceProvider.PHP

PackageServiceProvider.PHP的命名空间为vendor\Package,而类为PackageServiceProvider。 据我所知,这就是应该的样子。但是作曲家仍会发出弃用通知

我可能应该提到,我还尝试在所有尝试过的事情(主要是更改大小写)之间运行composer clearcache,但没有帮助。

我完全不知道如何解决此问题。

我正在使用Composer 1.10.13版和Laravel 5.8.38版。

我收到的许多弃用通知之一:

Deprecation Notice: Class vendor\Package\PackageServiceProvider located in D:/wwwroot/project/vendor/{package-vendor}/package/src/Package\PackageServiceProvider.PHP does not comply with psr-4 autoloading standard. It will not autoload anymore in Composer v2.0. in phar://C:/Users/me/AppData/Local/ComposerSetup/bin/composer.phar/src/Composer/Autoload/ClassMapGenerator.PHP:201

解决方法

事实证明,我们git存储库中的软件包版本在其composer.json中存在错误,我一直在本地对其进行修复。但是,由于它不是在回购库中固定的,因此作曲家从未完成过对依赖项的更新,也没有更新其与软件包的链接。

我要做的就是改变

{
    "autoload": {
       "psr-4": {
              "Vendor\\": "src/Package"
          },}
}

{
    "autoload": {
       "psr-4": {
              "Vendor\\Package\\": "src/Package"
          },}
}

并将其推送到存储库中。

,

那是错误的方法。该软件包显然是您手动放置在vendor/文件夹中的(也就是说,可以。)应该是具有自己的composer.json文件的有效composer软件包。然后,普通的composer dumpautoload就足以构建用于自动加载的类映射。不需要像您这样的怪胎。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...