Php 如何在不需要提交或发布更改的情况下开发依赖的composer包?
我有一个应用程序A,它有一个composer.json文件,定义了对包p的依赖关系,包p是我自己的新包。我的包P有一个composer.json文件,它定义了对库L和框架F的依赖关系。我的包P还没有远程存储库,它还没有发布在packagist.org上-我基本上是在修补它,通过在浏览器中运行应用程序a并不断修改包P来尝试不同的事情,A依赖于哪个应用程序 有一些问题让我的工作流程变得非常复杂: 1)只有使用本地存储库才能定义对p的依赖关系,如这里所述:问题是,这迫使我在实际测试p之前将每个更改提交到p 2)参考1)这意味着每次我提交对p的更改时,我都必须运行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之前将每个更改提交
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
,它在中本地注册