问题描述
在我的项目中,我包括一个正在开发的软件包,该软件包具有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
就足以构建用于自动加载的类映射。不需要像您这样的怪胎。