php - Composer 不为库生成自动加载

标签 php autoload composer-php psr-0 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/"
        }
    }        
}

从需要该库的项目中获取 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"
    }
}

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

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

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

我做错了什么?如果我在库项目中运行 dump-autoload,那么 autoload_namespaces.php 文件是正确的,并且快速引导脚本会确认它确实选择了该类。

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

编辑 #2 - Satis 不从指定为“包”类型的存储库中读取 composer.jsons。事后看来,这是显而易见的,因为“包”用于没有 composer.json 的库,并且是一种围绕它们包装类似 Composer 的依赖项管理的方法。

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

@Seldaek - 感谢您建议我的 satis 配置是问题所在,我希望这能为处于我位置的任何其他人澄清 satis/composer 行为。

最佳答案

我看到您可能犯了两个可能导致此问题的错误:

  • 您忘记更新您的 satis 存储库,所以 lxp/init 的自动加载配置在那里不是最新的
  • 您正在从锁定文件运行 composer install,这意味着 composer 只是从 composer.lock 文件中读取信息,而不会将包元数据更新到 satis 中可用的最新版本。要解决此问题,您应该改为运行 composer update

关于php - Composer 不为库生成自动加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16408059/

相关文章:

PHP 自动加载 : Preventing 'cannot redeclare <class>' in all constellations?

laravel-5 - 不能使用 'PhpParser\Node\Scalar\String' 作为类名,因为它是保留的

php - Heroku 部署错误 : No runtime requirements

php - 故障排除 "Notice: Undefined index"错误

PHP 数据结构(类 Java)集合

php - 未找到 PostsController::index() - CakePHP

php - 如何使用 Composer 加载我自己的供应商文件夹?

php - Composer 类映射和加载具有非标准扩展名的文件

php - 需要上传图片时出现的问题

php - 没有 Composer 的 PSR 4 自动加载