gpt4 book ai didi

replace - "replace"属性如何与 Composer 一起使用?

转载 作者:行者123 更新时间:2023-12-02 09:32:24 26 4
gpt4 key购买 nike

那么“replace ”属性如何与 composer 一起使用? ?我已经阅读了 Composer 文档,但仍然不明白。搜索更多信息并没有回答我的问题。

当我查看Laravel/Framework上的composer.json文件时在 github 上。我看不出替换将如何工作。有人可以向我解释这是如何工作的吗?变量“self.version”等于什么?

最佳答案

Composer 文档提供了两个基本示例。我将尝试解释:

Lists packages that are replaced by this package. This allows you to fork a package, publish it under a different name with its own version numbers, while packages requiring the original package continue to work with your fork because it replaces the original package.

假设您的软件使用original/libraryother/package,它本身也需要original/library

现在你认为original/library需要集成一个功能,但是维护者不会让你的建议发生在他们的包中。您决定以 better/library 名称 fork 该库,并标记一个新版本。

返回您的软件。当然,它应该开始使用 better/library,因此您需要它,但是 other/package 仍然需要 original/library - 代码复制!如何使其他包使用您的 better/library 而无需 fork 它并且仅更改composer.json(您仍然与该original/library兼容,所以它应该可以工作)?

您将替换键添加到您的composer.json:

"replace": {
"original/library":"1.0.2"
}

现在,Composer 知道,在解决 other/的依赖关系时,better/library 中的任何包都与 original/library 一样好。包

This is also useful for packages that contain sub-packages, for example the main symfony/symfony package contains all the Symfony Components which are also available as individual packages. If you require the main package it will automatically fulfill any requirement of one of the individual components, since it replaces them.

相同的规则,略有不同的角度:对于需要某些功能的任何其他组件来说,要求框架的组件是一个好方法。但是,如果您需要软件中的完整框架和另一个库,该库随后也需要该框架的组件,则该框架的 replace 声明允许 Composer 不必安装该单个组件两次,因为它已经包含在完整的框架中。

注意:替换版本中的占位符通常不好

在我原来的回答中,我建议:

"replace": {
"original/library":"1.*"
}

这会产生后果:Composer 现在会将您的库版本 1.0.0 视为与原始库的任何版本 1.x 一样好,即使它们修复了内容或添加了功能并在某一天发布了版本 1.2.34。这也意味着,如果您的 other/package 有一天获得更新并需要 original/library:^1.1,则 YOUR 库中的替换为仍然有效,并声明它可以替换任何版本 1.*,即使您没有更新内部任何内容 - 但它不能,如果您不做一些工作,您的旧代码将永远不会实现原始库的新功能,但替换内容正是如此。

所以本质上:避免在替换版本中使用通配符版本!如果您使用它们,您就对您无法知道或预测的 future 做出了陈述(除非您可以控制original/library,但即使这样也要非常小心)。始终使用您了解并可以完全重新实现的原始/库特定版本。

关于replace - "replace"属性如何与 Composer 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18882201/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com