Composer不为库生成自动加载

bmc*_*vin 11 php autoload psr-0 composer-php satis

我已经设置了两个项目,一个'init'和一个库,这是init需要的.它们都设置了PSR-0自动加载,但是库中的自动加载值未添加到init项目中的vendor/composer/autoload_namespaces.php中.

来自库的示例composer.json:

{
    "name": "lxp/library",
    "description": "A test library",
    "autoload": {
        "psr-0": {
            "LXP\\Library": "src/"
        }
    }        
}
Run Code Online (Sandbox Code Playgroud)

从需要该库的项目示例composer.json:

{
    "name": "lxp/init",
    "name": "A test init",
    "autoload": {
        "psr-0": {
            "LXP\\Init": "src/"
        }
    },
    "repositories": [
        {
            "type": "composer",
            "url": "http://satis.repo.redacted/"
        }
    ],
    "require": {
        "lxp/library": "dev-master"
    }
}
Run Code Online (Sandbox Code Playgroud)

该库包含文件src/LXP/Library/Something.php中的LXP\Library\Something类.

需要库的项目在文件src/LXP/Init/Now.php中包含类LXP\Init\Now.

在'init'项目中运行composer install时,它会下载库项目并将其正确放入供应商,但vendor/composer/autoload_namespaces.php不包含库的自动加载信息,只包含当前项目的信息.

我究竟做错了什么?如果我在库项目中运行dump-autoload,那么autoload_namespaces.php文件是正确的,并且一个快速的引导程序脚本确认它确实提取了该类.

编辑 - 这是令人满意的packages.json的问题.为了修复它,我不得不将库的composer.json中的自动加载信息添加到我提供的json文件中,这似乎是一个不必要的重复,所以我可能做错了.是否有一个地方可以存储自动加载信息以满足库?例如,是否可以读取它扫描的库中存在的composer.json文件?

编辑#2 - Satis不会从指定为'package'类型的存储库中读取composer.jsons.事后看来这很明显,因为'package'用于没有composer.json的库,并且是一种围绕它们包装类似于作曲家的依赖管理的方法.

将satisf.json的存储库更改为'vcs'类型意味着读取了composer.json,并且解析了信息(包括自动加载规范)并将其存储在packages.json中.

@Seldaek - 谢谢你建议我的满意配置是问题所在,我希望这能澄清我职位上任何其他人的满意/作曲家行为.

kta*_*kta 8

试试composer dump-autoload命令。


Sel*_*aek 7

我看到你可能犯过两个可能导致这种错误的错误:

  • 您忘记更新您的满意的回购,因此lxp/init的自动加载配置不是最新的
  • 您正在从锁定文件运行composer install,这意味着composer只是从composer.lock文件中读取信息,并且不会将包元数据更新为满意的最新版本.要解决此问题,您应该运行composer update.


ken*_*orb 5

这取决于您如何通过Composer安装库。例如,当将其作为package类型下载时(我相信与composer类型相同),Composer从不读取composer.json文件,因此您应该使用vcsgit输入。见:GH-6846

这是composer.json应该工作的:

{
  "require": {
    "lxp/library": "dev-master"
  },
  "repositories": [
    {
      "type": "vcs",
      "url": "http://satis.repo.redacted/"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

然后运行:composer install

要进行故障排除,请尝试运行:

  • composer dump-autoload -o -vvv.
  • composer diagnose -vvv