【发布时间】:2014-08-18 02:10:13
【问题描述】:
这是我的包的 composer.json(缩短)
{
"name": "acme/my-bundle",
"type": "library",
"version": "0.5.0",
"autoload": {
"psr-4": {
"Acme\\MyBundle\\": ""
}
}
}
在我的项目中:
"require": {
"acme/my-bundle": "dev-master"
},
然后我运行composer install 导致一个installed.json 像
[
{
"name": "acme/my-bundle",
"version": "dev-master",
"version_normalized": "9999999-dev",
"type": "library",
"installation-source": "source"
//
// here must be this:
// "autoload": {
// "psr-4": {
// "Acme\\MyBundle\\": ""
// }
// },
// but these lines are missing!
//
}
]
还有一个 autoload-psr4.php:
<?php
// autoload_psr4.php @generated by Composer
$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);
return array(
/* here must be this:
* 'Acme\\MyBundle\\' => array($vendorDir . '/acme/my-bundle'),
* but this line is missing!
*/
);
自动加载消失了,还有其他键,如require
我错过了什么?
我也尝试了 psr-0,但没有成功。 autoload_namespaces.php 只是一个空数组。
【问题讨论】:
-
如果缺少该行,那么 Composer 会安装一个提交,但在您的存储库中缺少这些行。您可能搞砸了 Composer 版本检测,因为您显然使用 Git 进行版本控制,但确实在 composer.json 中明确指定了一个版本。我还不清楚还有什么问题,但这是我的声明:在使用可以实际标记版本的版本控制系统时,永远不要在 composer.json 中指定版本。您可能应该删除供应商文件夹和 composer.lock 文件并运行
composer update来尝试解决此问题。 -
@Sven:每次尝试后我都完全删除了 composer.lock 和 vendor 文件夹。已找到解决方案。
标签: composer-php autoload psr-0 psr-4