我维护一个程序包,该程序包用作由Composer管理的其他应用程序的库。
我不明白在没有Composer妨碍并始终覆盖我的工作的情况下如何处理我的包裹。
我想要的是这个东西
- some_app
- vendor
- my_package
其中my_package是我控制下的git克隆,可以在其中创建测试分支,推送到github等,并且Composer不会覆盖它或更改当前已签出的提交。
但是我希望Composer注意到我的软件包具有自动装带器,并考虑其满足some_app运行的要求,以及composer在some_app上的更新才能正常运行。
我该怎么做?
答案 0 :(得分:1)
Composer 不不支持您要求的确切功能。作为其他应用程序的插件,您无法修改vendor
中的任何内容并希望其保留。 Composer将直接根据vendor
文件中的信息来组成composer.json
的全部内容。除非您在composer.json
文件中有用于声明钩子的指令,否则不允许进行后处理。
因此,正确的方法是使用应用程序提供的机制来管理插件所需的依赖关系。 Symfony flex是Composer插件机制的一个示例; RoboPHP有另外一个。
如果您尝试扩展的应用程序不支持允许其插件声明Composer依赖关系,则可以潜在地创建自己的composer.json文件,将其存储在应用程序不知道的某个位置,并使用该文件生成您的拥有自己的vendor
文件的独立autoload.php
目录。然后,您可以手动包含自己的自动加载文件,该文件将允许PHP然后包含vendor
目录中包含的任何类文件。如果插件的依赖关系未由主应用程序使用,并且未出现在主应用程序的vendor
目录中的任何位置(包括所有依赖关系及其依赖关系,等等),那么它将起作用。但是,如果插件中的依赖项与主应用程序的依赖项之间存在重叠,那么您可能会发现此解决方案在某些时候有效,而在其他时候却以难以诊断的方式严重失败。有关为何有多个自动加载文件不是一个好主意的解释,请参阅博客文章The Trouble with Two Autoloaders和Fixing the Composer Global Command。