iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >如何使用replace属性来避免Composer的依赖冲突
  • 425
分享到

如何使用replace属性来避免Composer的依赖冲突

2023-06-09 09:06:02 425人浏览 薄情痞子
摘要

这篇文章将为大家详细讲解有关如何使用replace属性来避免Composer的依赖冲突,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Composer 文档提供了两个基本的示例。 我将尝试解释一下:列出被该

这篇文章将为大家详细讲解有关如何使用replace属性来避免Composer的依赖冲突,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

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

列出被该软件包替换的软件包。 这样,你就可以 fork 一个包,并使用自己的版本号以不同的名称发布,而需要原始包的软件包可以继续使用你的 fork 包,因为它会替换原始包。

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

现在你认为 original/library 需要集成新功能,但是维护人员不同意你的建议在他们的软件包中实现。 所以你决定以  better/library 的名称派生该库,并标记一个新发行版。

回到软件。当然,它应该开始使用 better/library 包,所以要用它来代替,但 other/package 仍然需要 original/library - 代码重复!如何让那个包使用你的 better/library 来代替 original/library?而不需要对它进行 fork ,只需要修改 composer.JSON(你仍然与 original/library 兼容,所以它应该可以工作了)?

你需要增加 replace 关键字在 composer.json

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

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

这对于包含子包的包也很有用,例如,主 symfony/symfony 包包含所有 Symfony 组件,这些组件也可以作为单独的包使用。如果您需要主包,它将自动满足单个组件之一的要求,因为它将替换它们。

相同的规则,只是角度略有不同:对于需要某些功能的任何其他组件,引入框架的组件是一种不错的方法。但是,如果你在软件中需要完整的框架,而另一个库又需要该框架的组件,则该框架的 replace  声明使 Composer 不必两次安装该单个组件,因为它已经包含在完整的框架中。

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

在我最初的回答中,我建议:

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

这带来的后果是:Composer现在将把你的库版本 1.0.0 和原来库的任何版本 1.x 一样好,即使他们在某一天修复了一些东西或添加了一些特性并发布了版本1.2.34。这也意味着,如果某一天你的「other/package」得到更新,并且需要「original/library:^1.1」,库中的替换仍处于活动状态,并声明它可以替换任何版本 1*,,即使你不更新内部的任何内容-这样做也无法完成,但是如果你不做任何工作,你的旧代码就永远不会实现原始库的新功能,但替换内容恰恰说明了这一点。

因此,从本质上讲:在替换版本中避免使用通配符版本! 如果使用它们,则会对你无法了解或预测的未来做出声明(除非你可以控制 original/library ,但即使这样也要非常小心)。 一定要使用你知道的并且可以完全重新实现的 original/library

关于“如何使用replace属性来避免Composer的依赖冲突”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

--结束END--

本文标题: 如何使用replace属性来避免Composer的依赖冲突

本文链接: https://www.lsjlt.com/news/255503.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何使用replace属性来避免Composer的依赖冲突
    这篇文章将为大家详细讲解有关如何使用replace属性来避免Composer的依赖冲突,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Composer 文档提供了两个基本的示例。 我将尝试解释一下:列出被该...
    99+
    2023-06-09
  • Git的使用规范:如何避免代码冲突?
    Git是一款广泛使用的版本控制系统,它可以帮助团队协作开发,以及管理代码的版本。但是,当多个人同时修改同一个文件时,就有可能发生代码冲突的情况。本文将介绍Git的使用规范,以及如何避免代码冲突。 1. Git分支管理 Git的分支管理功能可...
    99+
    2023-10-15
    编程算法 javascript git
  • 如何避免使模块中的所有包都可用依赖项?
    问题内容 由于具有 .net 背景,我目前正在尝试将我的第一个 go 项目调整为更典型的 go 项目结构(与此类似)。我不明白的是,如何避免依赖项意外地进入不属于它们的包中。 假设我有...
    99+
    2024-02-06
  • 如何使用NPM来管理您的项目依赖?
    对于前端开发人员来说,项目依赖的管理一直是一个非常重要的任务。如果您经常使用Node.js来构建应用程序,那么您应该已经熟悉了NPM(Node Package Manager)。NPM是一个包管理器,它允许您轻松地管理您的项目依赖。在本篇...
    99+
    2023-08-30
    索引 git npm
  • 如何使用NPM来管理Java的版本依赖?
    在Java的开发过程中,我们经常需要使用到各种各样的库和框架,这些依赖的版本管理是非常重要的一项工作。在Node.js的生态中,我们通常会使用NPM来管理依赖,那么,我们是否也可以使用NPM来管理Java的版本依赖呢?本文将会介绍如何使用...
    99+
    2023-09-23
    索引 npm leetcode
  • 分布式Java应用程序中的对象数组:如何避免数据冲突?
    在分布式Java应用程序中,由于涉及到多个节点之间的数据交互,对象数组的使用显得尤为重要。但是,当多个节点同时访问同一个对象数组时,很容易发生数据冲突,这会导致程序出现错误或者性能下降。本文将介绍如何在分布式Java应用程序中使用对象数组避...
    99+
    2023-09-08
    分布式 对象 数组
  • 如何使用npm来管理ASP应用程序的依赖关系?
    ASP.NET是一种流行的Web应用程序框架,它使用C#或VB.NET等语言编写。在开发ASP.NET应用程序时,我们通常会使用许多第三方库和工具,如jQuery、Bootstrap、Entity Framework等。这些库和工具的管理...
    99+
    2023-08-04
    存储 异步编程 npm
  • css如何使用flexbox布局来避免margin的问题
    这篇文章主要介绍了css如何使用flexbox布局来避免margin的问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。使用flexbox布局来避免margin的问题 (Ge...
    99+
    2023-06-27
  • 如何在Unix上使用npm来管理ASP项目的依赖项?
    在Unix系统上,使用npm来管理ASP项目的依赖项是一个非常方便和有效的方法。npm是一个Node.js软件包管理器,它可以自动帮助我们下载并安装所需的软件包和依赖项。本文将介绍如何在Unix上使用npm来管理ASP项目的依赖项。 一、安...
    99+
    2023-06-16
    npm 学习笔记 unix
  • PHP开发者必须知道的索引技术,如何使用NPM来管理依赖?
    索引技术是现代软件开发中的重要组成部分。它们允许开发者快速地查找和获取所需的依赖项。在PHP开发中,有几种索引技术可用于管理依赖项。在本文中,我们将探讨这些技术,并介绍如何使用NPM来管理您的PHP项目依赖项。 Composer Co...
    99+
    2023-08-07
    索引 http npm
  • PHP8中如何使用Constructor Property Promotion来简化类的属性声明?
    PHP8是PHP编程语言的最新版本,引入了一项强大的特性,即Constructor Property Promotion(构造函数属性提升)。这个特性使得在类的构造函数中定义和初始化属性变得非常简单和优雅。本文将详细介绍Constructo...
    99+
    2023-10-22
    PHP Constructor Property Promotion 类属性声明
  • Oracle 12.2如何使用dbms_redefinition.redef_table过程来重定义表的存储属性
    这篇文章主要为大家展示了“Oracle 12.2如何使用dbms_redefinition.redef_table过程来重定义表的存储属性”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作