Php 如何在不需要提交或发布更改的情况下开发依赖的composer包?

Php 如何在不需要提交或发布更改的情况下开发依赖的composer包?,php,workflow,composer-php,dependency-management,package-development,Php,Workflow,Composer Php,Dependency Management,Package Development,我有一个应用程序A,它有一个composer.json文件,定义了对包p的依赖关系,包p是我自己的新包。我的包P有一个composer.json文件,它定义了对库L和框架F的依赖关系。我的包P还没有远程存储库,它还没有发布在packagist.org上-我基本上是在修补它,通过在浏览器中运行应用程序a并不断修改包P来尝试不同的事情,A依赖于哪个应用程序 有一些问题让我的工作流程变得非常复杂: 1)只有使用本地存储库才能定义对p的依赖关系,如这里所述:问题是,这迫使我在实际测试p之前将每个更改提交

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

有一些问题让我的工作流程变得非常复杂:

1)只有使用本地存储库才能定义对p的依赖关系,如这里所述:问题是,这迫使我在实际测试p之前将每个更改提交到p

2)参考1)这意味着每次我提交对p的更改时,我都必须运行
composer update
(我首先不想提交更改)

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

因此,在我的建议中,有两种可能的工作流:

1)在p中提交更改,在A中更新编写器,然后查看更改的结果

2)不要将本地存储库用作依赖项,只需将p的composer.json文件中定义的依赖项复制到A的composer.json文件中,即可使用
composer install
获取依赖项L和F

基本上,我正在搜索一个工作流来开发一个新的composer软件包,在这里我可以运行
composer安装/更新
来安装所有第三方依赖项,但不需要提交我自己的本地软件包中的更改来测试更改

上述问题有什么解决办法吗


非常感谢

当我需要同时处理多个软件包时,我使用的解决方案是在本地注册每个软件包,并在
composer安装后或在首次
composer更新后将其从供应商目录中删除,并将其符号链接到存储本地“WIP”版本的位置

例如:

  • 在composer.json中,我需要
    我的供应商/packageA
    ,它在
    ~/.composer/config.json
    中本地注册
  • 我执行
    composer更新我的供应商/packageA
    ,使composer知道我的新软件包
  • composer完成安装我的软件包后:
    • cd供应商/my_供应商和rm-rf packageA和&ln-s../../../../packageA
这将给我留下类似的东西:

  • 工作主任/
    • packageA/(这是我在packageA上工作的地方)
    • 项目A/
      • 应用程序
      • src
      • 卖主/
        • 卖方1/
        • 卖方2/
        • 我的小贩/
          • packageA->../../../../packageA
这使我能够:

  • 甚至从我的供应商目录中更改
    packageA
  • projectA
    中使用这些更改之前,我不需要提交到
    packageA
当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.

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

例如:

  • 在composer.json中,我需要
    我的供应商/packageA
    ,它在
    ~/.composer/config.json
    中本地注册
  • 我执行
    composer更新我的供应商/packageA
    ,使composer知道我的新软件包
  • composer完成安装我的软件包后:
    • cd供应商/my_供应商和rm-rf packageA和&ln-s../../../../packageA
这将给我留下类似的东西:

  • 工作主任/
    • packageA/(这是我在packageA上工作的地方)
    • 项目A/
      • 应用程序
      • src
      • 卖主/
        • 卖方1/
        • 卖方2/
        • 我的小贩/
          • packageA->../../../../packageA
这使我能够:

  • 甚至从我的供应商目录中更改
    packageA
  • projectA
    中使用这些更改之前,我不需要提交到
    packageA
当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.

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

例如:

  • 在composer.json中,我需要
    我的供应商/packageA
    ,它在中本地注册