【问题标题】:How to edit composer-loaded vendor code the right way (in PHP)?如何以正确的方式(在 PHP 中)编辑 composer 加载的供应商代码?
【发布时间】:2013-10-15 17:30:24
【问题描述】:

问题

有时,composer 加载的依赖项有问题或缺少您需要的东西。

问题

1.) 通常是否允许触摸/编辑作曲家加载的任何内容?

2.) 如果是,那么如何防止这些编辑被覆盖/与下一次更新产生冲突

3.) 如果不是,那么当需要编辑 composer 加载的依赖项时该怎么办?

【问题讨论】:

    标签: php composer-php


    【解决方案1】:
    1. 简单的答案是否定的。

    2. 您可以编辑文件,但更改不是永久性的。

    3. 您必须找到修复错误的方法。可用的方法有:

      1. 向上游报告错误,可能带有建议的修复(补丁或拉取请求),并等待它包含在新版本中
      2. 克隆原始软件,修复那里的错误,并在 a) 发生期间使用您的composer.json 指向您克隆的存储库。您可能必须将 dev-master 分支(或您用来修复错误的任何分支)别名为下一个版本以满足所有依赖项。
      3. 如果原始项目未维护,您可以考虑以新名称重新发布它,修复错误,并在composer.json 中声明此新软件替换旧软件。请参阅my answer here for details。
      4. 您还可以切换到错误较少的其他软件。
      5. 您还可以尝试通过在自己的代码库中扩展有缺陷的类来修补该错误,或​​通过其他方式解决它。

    【讨论】:

    • 很抱歉提出一个老问题,但是回复:1. 如果它是您维护的库怎么办?最好在自己的结帐中编辑它并在使用它的项目中进行作曲家更新?我注意到,如果您从供应商/* 编辑/推送,composer.json 中的引用会不同步。但是,作曲家更新会刷新 .lock 文件,所以一切都很好。
    • 如果你不编辑和推送,而是从不同的位置,你的库必须在使用它的地方更新,这甚至不会导致锁冲突文件。请注意,获取新版本的首选方法是标记它们。即使可以在供应商文件夹中编辑内容,也有这些缺点,您必须处理冲突并注意不要无意中覆盖您的更改。我会尽量避免它。一个好的库应该自己开发,不需要在某个地方集成,但有时可能需要。
    • 嗨,斯文,我喜欢你的第五个解决方案。刚刚发现一个具有过时依赖项和 6 个月大的拉取请求仍未合并的项目。我扩展了类,只是用维护的依赖项替换了依赖项。 6 行代码,无需担心作曲家更新会破坏任何内容。谢谢。
    猜你喜欢
    • 2015-11-20
    • 2015-07-08
    • 2014-04-23
    • 1970-01-01
    • 2015-09-15
    • 1970-01-01
    • 2019-03-14
    • 1970-01-01
    • 2014-06-07
    相关资源
    最近更新 更多