13

我已经设置了两个项目,一个“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 文件是正确的,并且快速引导脚本确认它确实选择了该类。

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

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

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

@Seldaek - 感谢您提出我的 satis 配置是问题所在,我希望这可以澄清我所在职位的其他任何人的 satis / composer 行为。

4

3 回答 3

8

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

  • 您忘记更新您的满意存储库,因此 lxp/init 的自动加载配置在那里不是最新的
  • 您正在从 lock 文件运行 composer install,这意味着 composer 只是从 composer.lock 文件中读取信息,并且不会将包元数据更新为 satis 中可用的最新版本。要解决这个问题,您应该运行 composer update代替。
于 2013-05-07T07:12:49.347 回答
8

试试composer dump-autoload命令。

于 2015-09-10T10:08:32.357 回答
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/"
    }
  ]
}

然后运行:composer install

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

  • composer dump-autoload -o -vvv.
  • composer diagnose -vvv
于 2017-11-27T12:43:54.847 回答