我有一个应用程序 A,它有一个composer.json 文件,定义了对包 P 的依赖关系,这是我自己的新闪亮包。我的包 P 有一个composer.json 文件,它定义了对库 L 和框架 F 的依赖关系。我的包 P 还没有远程存储库,并且尚未在 packagist.org 上发布 - 我基本上正在修改它,尝试不同的东西通过在浏览器中运行应用程序A并不断修改我的包P,应用程序A所依赖的包P。
有一些问题使我的工作流程变得非常复杂:
1)定义 A 对 P 的依赖关系只能使用本地存储库,如下所述:https://getcomposer.org/doc/05-repositories.md https://getcomposer.org/doc/05-repositories.md问题是,这迫使我必须先将所有更改提交给 P,然后才能在 A 上实际进行测试。
2)参考1)这意味着我必须运行composer update
每次我对 P 进行更改时。(我一开始就不想提交。)
3)另一边,当not使用 P 中的本地存储库,我无法定义 A 对 P 的真正依赖关系,这意味着运行composer install
不会安装P的composer.json文件中定义的依赖项L和F。
因此,我认为有两种可能的工作流程:
1)提交 P 中的更改,composer update
在 A 中,看看更改效果如何。
2)不要使用本地存储库作为依赖项,而只是copyP 的composer.json 文件中定义的依赖关系到A 的composer.json 文件才能使用composer install
获取依赖项 L 和 F。
基本上我正在寻找一个工作流程来开发一个新的作曲家包,我可以在其中运行composer install/update
安装所有第 3 方依赖项,但无需在我自己的本地包中提交更改来测试更改。
有没有办法解决上述问题呢?
多谢!
当我需要同时处理多个包时,我使用的解决方案是在本地注册每个包,然后在composer install
或在第一个之后composer update
我从供应商目录中删除该包并将其符号链接到存储本地“WIP”版本的位置。
例如:
- 在composer.json中我需要
my_vendor/packageA
,它是在本地注册的~/.composer/config.json
.
- 我执行
composer update my_vendor/packageA
让作曲家知道我的新包。
- After composer finishes installing my package:
- cd 供应商/my_vendor && rm -rf packageA && ln -s ../../../packageA 。
这会给我留下类似的东西:
- working_dir/
- 包A/(这是我在 packageS 上工作的地方)
- projectA/
- app
- src
- vendor/
- vendor1/
- vendor2/
- my_vendor/
这允许我:
- 改变
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()
method.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)