如何防止在“作曲家更新”命令时覆盖文件

Posted

技术标签:

【中文标题】如何防止在“作曲家更新”命令时覆盖文件【英文标题】:how to prevent over writing file while 'composer update' command 【发布时间】:2015-10-15 21:58:13 【问题描述】:

我正在开发 laravel 5.1 项目。我已经更新了一些自定义文件,例如供应商/laravel/framework/src/Illuminate/Foundation/Auth/AuthenticatesUsers.php 文件。它需要安装新包,所以我修改了 composer.json 并运行命令“composer update”并安装了包,但我在 AuthenticatesUsers.php 文件中更新的所有代码都被替换为原始代码。

更新作曲家时如何防止这种覆盖?

【问题讨论】:

【参考方案1】:

如果您还想使用 Composer 轻松更新依赖项,则不应编辑 vendor 文件夹中的文件。有效地编辑外部包的文件意味着您正在分叉该项目并自己维护它。这意味着您只应用一次更改然后停止所有进一步的开发,或者您必须不断检查原始包的更新并将其更改与您的更改合并。

我很确定有一些方法可以解决向现有文件添加更改的潜在问题,但是您当前的问题受到 XY problem 的影响 - 您想向 Laravel 添加更改但不知道如何正确执行,发现编辑可能会解决问题,但现在需要防止覆盖该文件,并询问防止覆盖 - 而不是询问如何向 Laravel 类添加更改。

【讨论】:

也许你是对的。其实不久前就开始使用 laravel 了。感谢您的回复。 考虑像mpdf 这样的包,实际上需要你添加文件和编辑配置文件才能工作。我知道我不应该编辑供应商文件,但要使用我需要的包来添加文件和编辑供应商文件,这不是一个选择。 我可能不应该评论像“mpdf”这样的软件,因为它没有被更新以适应现代 PHP(这个软件仍然是 PHP 4!)。不要使用它!它的配置机制与现代使用 Composer 的方式不兼容。但是您仍然可以定义 _MPDF_PATH 来覆盖包提供的配置(并忍受由此带来的痛苦),或者开始研究如何以另一种方式配置该包。可悲的是,我知道没有没有以这种方式损坏的 PDF 库,因为我所看到的所有内容都继承自 fpdf。迄今为止最好的:TCPDF。【参考方案2】:

一个不错且干净的解决方案是fork the repository 并将其添加到packagist。然后只需使用您改进的(可以这么说)laravel 的源代码版本更改作曲家依赖项。

【讨论】:

我会调查一下,谢谢。 这可能不太干净,因为解决方案包含分叉一个项目。这会立即使维护工作量翻倍,并增加开发不兼容的风险。 如果您想编辑源代码,这是唯一的选择。或者你可能有什么想法? :) 你不必把它放在 packagist 或其他人上,你也可以使用私有存储库。看到这个getcomposer.org/doc/…

以上是关于如何防止在“作曲家更新”命令时覆盖文件的主要内容,如果未能解决你的问题,请参考以下文章

如何防止web.config在网站更新时使用webdeploy覆盖

如何防止SBT重新编译修改后的.class文件?

如何防止在 Python 中使用 FTPLIB 覆盖现有文件?

cmd,如何让xcopy命令在复制时不提示覆盖?

使用命令“插入覆盖目录”使用配置单元导出数据时如何打印输出文件大小

如何防止scaffold.css 覆盖我的自定义css?