0

我有一个应用程序 A,它有一个 composer.json 文件,它定义了对包 P 的依赖,这是我自己的新闪亮包。我的包 P 有一个 composer.json 文件,它定义了对库 L 和框架 F 的依赖关系。我的包 P 还没有远程存储库,它还没有在 packagist.org 上发布——我基本上是在修补它,尝试不同的东西通过在浏览器中运行应用程序 A 并不断修改我的包 P,应用程序 A 所依赖的包。

有一些问题确实使我的工作流程变得复杂:

1)只能使用本地存储库定义 A 对 P 的依赖关系,如下所述:https ://getcomposer.org/doc/05-repositories.md问题是这迫使我在之前提交对 P 的所有更改我实际上可以在 A 上测试它。

2)参考 1)这意味着我composer update每次对 P 进行更改时都必须运行。(我一开始不想提交。)

3)另一方面,当不在P 中使用本地存储库时,我无法从 A 对 P 定义真正的依赖关系,这意味着运行composer install不会安装在 P 的 composer.json 文件中定义的依赖关系 L 和 F。

因此,在我看来,有两种可能的工作流程:

1)在 P 中提交更改,composer update在 A 中查看更改效果如何。

2)不要使用本地存储库作为依赖项,只需将P的composer.json文件中定义的依赖项复制到A的composer.json文件中,以便能够使用composer install获取依赖项L和F。

基本上我正在寻找一个工作流来开发一个新的 composer 包,我可以在其中运行composer install/update以安装所有 3rd 方依赖项,但无需在我自己的本地包中提交更改来测试更改。

是否有任何解决上述问题的方法?

非常感谢!

4

1 回答 1

3

当我需要同时处理多个包时,我使用的解决方案是在本地注册每个包,然后在我从供应商目录中删除该包并将其符号链接到我存储的位置之后composer install或之后composer update本地“WIP”版本。

例如:

  • 在 composer.json 我需要my_vendor/packageA,它是在本地注册的~/.composer/config.json
  • 我执行composer update my_vendor/packageA让作曲家知道我的新包。
  • 在作曲家完成安装我的包后:
    • cd vendor/my_vendor && rm -rf packageA && ln -s ../../../packageA 。

这会给我留下类似的东西:

  • 工作目录/
    • packageA/(这是我在 packageA 上工作的地方
    • 项目A/
      • 应用程序
      • 源代码
      • 小贩/
        • 供应商1/
        • 供应商2/
        • 我的供应商/
          • 包A -> ../../../包A

这允许我:

  • packageA甚至从我的供应商目录中进行更改
  • 在我packageA可以在我的projectA.

当 packageA 足够稳定时,符号链接将被删除,一切都会恢复正常,使用来自 VCS/packagist 的版本。

随着时间的推移,我尝试了不同的解决方案,我发现上述方法最适合我。

我可以使用的另一种解决方案是为每个前缀手动注册 PSR-0 目录:

<?php

$autoloader = require_once __DIR__.'/vendor/autoload.php';
$autoloader->add('MyVendor\\Dummy\\', '/path/to/dummy-component/src');

// now you can use MyVendor\Dummy as normal.

注意:对于 PSR-4,有addPsr4()方法。

于 2014-10-05T10:59:08.510 回答