찾다
개발 도구composerComposer 종속성 충돌을 방지하려면 교체 속성을 사용하세요.

튜토리얼 칼럼에서 작곡가의 의존성 충돌 방법을 피하기 위한 대체 속성의 사용을 소개하는 내용입니다. 도움이 필요한 친구들에게 도움이 되길 바랍니다! Composer 문서는 두 가지 기본 예를 제공합니다. 나는 그것을 설명하려고 노력할 것입니다:

이 패키지로 대체된 패키지를 나열하십시오. 이렇게 하면 패키지를 포크하고 자신의 버전 번호를 사용하여 다른 이름으로 게시할 수 있으며, 원본 패키지가 필요한 패키지는 원본 패키지를 대체하므로 포크된 패키지를 계속 사용할 수 있습니다.

귀하의 소프트웨어가 original/library가 필요한 original/libraryother/package를 사용한다고 가정해 보겠습니다.

이제 original/library에 새로운 기능을 통합해야 한다고 생각하지만 관리자는 패키지에 구현하라는 제안에 동의하지 않습니다. 따라서 better/library라는 이름으로 라이브러리를 포크하고 새 릴리스로 태그를 지정하기로 결정했습니다.

소프트웨어로 돌아갑니다. 물론 better/library 패키지를 사용하여 시작해야 하므로 대신 사용하세요. 하지만 other/package에는 여전히 original/library가 필요합니다. 반복하다! 해당 패키지가 원본/라이브러리 대신 better/library를 사용하도록 하려면 어떻게 해야 합니까? 이를 포크하고 그냥 Composer.json을 수정하는 대신(여전히 original/library와 호환되므로 작동해야 합니다)? 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

composer.json에 교체 키워드를 추가해야 합니다.
rrreee

이제 Composer는 "other/package"에 대한 종속성을 해결할 때 "better/library"의 모든 패키지가 "original"이 될 것임을 알고 있습니다. /library"도 마찬가지입니다.

이는 하위 패키지가 포함된 패키지에도 유용합니다. 예를 들어 기본 Symfony/symfony 패키지에는 별도의 패키지로도 사용할 수 있는 모든 Symfony 구성 요소가 포함되어 있습니다. 기본 패키지가 필요한 경우 개별 구성 요소 중 하나를 대체하므로 해당 요구 사항이 자동으로 충족됩니다.
🎜🎜동일한 규칙, 약간 다른 관점: 일부 기능이 필요한 다른 구성 요소와 마찬가지로 프레임워크의 구성 요소를 도입하는 것이 좋은 방법입니다. 그러나 소프트웨어에 완전한 프레임워크가 필요하고 다른 라이브러리에 해당 프레임워크의 구성 요소가 필요한 경우 프레임워크의 replace 선언을 사용하면 해당 단일 구성 요소가 이미 전체 라이브러리에 포함되어 있으므로 Composer가 해당 단일 구성 요소를 두 번 설치할 필요가 없습니다. 액자. 🎜🎜🎜 참고: 버전에서 자리 표시자를 바꾸는 것은 일반적으로 좋지 않습니다. 🎜🎜🎜 원래 답변에서 저는 다음을 제안했습니다. 🎜rrreee🎜 결과는 다음과 같습니다. Composer는 이제 라이브러리 버전을 1.0으로 변경하므로 모든 버전 1.x만큼 좋습니다. 언젠가 뭔가를 수정하거나 일부 기능을 추가하고 버전 1.2.34를 출시하더라도 원본 라이브러리의. 이는 또한 어느 날 "기타/패키지"가 업데이트되어 "원본/라이브러리:^1.1"이 필요한 경우 라이브러리의 대체 항목이 여전히 활성 상태이며 모든 버전 1*을 대체할 수 있다고 선언함을 의미합니다. >, 내부에 아무것도 업데이트하지 않더라도 완료되지는 않지만 아무 작업도 수행하지 않으면 이전 코드는 원래 라이브러리의 새로운 기능을 구현하지 않습니다. 그러나 대체 콘텐츠는 이를 정확하게 보여줍니다. . 🎜🎜따라서 기본적으로 대체 버전에서는 와일드카드 버전을 피하세요! 이를 사용하면 알거나 예측할 수 없는 미래에 대한 진술을 하는 것입니다( original/library 를 제어할 수 있는 경우는 제외하지만 매우 조심해야 합니다). 자신이 알고 있고 완전히 다시 구현할 수 있는 원본/라이브러리를 사용하세요. 🎜🎜🎜원본 주소: https://stackoverflow.com/questions/18882201/how-does-the-replace-property-work-with-composer🎜🎜번역 주소: https://learnku.com/laravel/t/ 55200🎜🎜

위 내용은 Composer 종속성 충돌을 방지하려면 교체 속성을 사용하세요.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
이 기사는 learnku에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제
데이터베이스 연결 문제 해결 : Minii/DB 라이브러리 사용 실질적인 사례데이터베이스 연결 문제 해결 : Minii/DB 라이브러리 사용 실질적인 사례Apr 18, 2025 am 07:09 AM

작은 응용 프로그램을 개발할 때 까다로운 문제가 발생했습니다. 가벼운 데이터베이스 운영 라이브러리를 신속하게 통합해야합니다. 여러 라이브러리를 시도한 후에는 기능이 너무 많거나 호환되지 않는다는 것을 알았습니다. 결국, 나는 내 문제를 완벽하게 해결하는 YII2를 기반으로 단순화 된 버전 인 Minii/DB를 발견했습니다.

사용자 경험 향상 : Viiny-Dragger를 사용하여 드래그 앤 드롭 기능을 구현하십시오.사용자 경험 향상 : Viiny-Dragger를 사용하여 드래그 앤 드롭 기능을 구현하십시오.Apr 18, 2025 am 07:06 AM

사용자 드래그 앤 드롭 기능이 필요한 프로젝트를 개발할 때 까다로운 문제가 발생했습니다. 프로젝트 복잡성을 증가시키지 않고 원활한 드래그 앤 드롭 상호 작용을 달성하는 방법 약간의 탐색 후, 나는 가벼운 JavaScript 플러그인 인 Viiny-Dragger를 발견하여 문제를 해결했을뿐만 아니라 사용자 경험을 크게 향상 시켰습니다.

Bitbucketapi를 해결하는 방법 Composer를 사용하여 충돌을 요청합니다Bitbucketapi를 해결하는 방법 Composer를 사용하여 충돌을 요청합니다Apr 18, 2025 am 07:03 AM

Bitbucket Repository에 대한 병합 요청을 처리 할 때 어려운 문제가 있습니다. 해당 상충되는 요청을 효과적으로 얻고 관리하는 방법. 이러한 요청을 수동으로 처리하는 것은 시간이 많이 걸릴뿐만 아니라 오류가 발생하기 쉽습니다. 일부 연구 후, 나는 Aleksandr-Kuporosov/BB-Api-Request-Conflicts라는 PHP 라이브러리를 발견했습니다. 작곡가를 통해 설치 한 후에는 쉽게 문제를 해결할 수 있습니다.

Symfony 프로젝트에서 환율을 우아하게 관리하는 방법Symfony 프로젝트에서 환율을 우아하게 관리하는 방법Apr 18, 2025 am 07:00 AM

다중 통화 거래 Symfony 프로젝트를 개발할 때 까다로운 문제가 발생했습니다. 다른 환율을 효율적으로 획득, 저장 및 사용하는 방법. 여러 가지 방법을 시도한 후이 데이터를 수동으로 처리하는 것이 번거 롭을뿐만 아니라 오류가 발생하기 쉬운 것으로 나타났습니다. 다행스럽게도 Symfony Integration 패키지 RunopenCode/Exchange-Rate-Bundle을 발견하여 문제를 완벽하게 해결했습니다.

작곡가를 사용하여 CouchDB 운영 단순화 : Yay-Couch/Couch Library의 연습 및 장점작곡가를 사용하여 CouchDB 운영 단순화 : Yay-Couch/Couch Library의 연습 및 장점Apr 18, 2025 am 06:57 AM

COUCHDB와의 상호 작용이 필요한 PHP 프로젝트를 개발할 때 도전에 직면했습니다. 데이터베이스 작업을 효율적이고 간결하게 관리하는 방법. 처음에 CouchDB의 API를 직접 사용하려고했지만 작업이 번거롭고 오류가 발생하기 쉽다는 것을 알았습니다. 약간의 탐사 후, 나는 Yay-Couch/Couch 라이브러리를 발견하여 워크 플로를 크게 단순화했습니다.

Composer를 사용하여 Zendframework3 응용 프로그램을 쉽게 빌드하십시오 : ZF3Buch/Zendframework-Center를 예로 들어보십시오.Composer를 사용하여 Zendframework3 응용 프로그램을 쉽게 빌드하십시오 : ZF3Buch/Zendframework-Center를 예로 들어보십시오.Apr 18, 2025 am 06:54 AM

개발 과정에서 새로운 프레임 워크 응용 프로그램을 구축하는 것은 종종 두통, 특히 초보자에게는 두통입니다. 최근에 Zendframework3을 기반으로 응용 프로그램을 구축하는 데 많은 어려움을 겪었습니다. 구성 파일, 종속성 관리 및 권한 설정 문제에 혼란스러워합니다. 다행스럽게도 샘플 응용 프로그램 ZF3Buch/Zendframework-Center를 발견하여 Composer와 쉽게 문제를 해결했습니다.

Composer를 사용하여 RSS 피드를 쉽게 구문 분석하는 방법Composer를 사용하여 RSS 피드를 쉽게 구문 분석하는 방법Apr 18, 2025 am 06:51 AM

뉴스 어 그리 게이터 프로젝트를 개발할 때 까다로운 문제가 발생했습니다. RSS 피드 및 원자 피드를 다른 형식으로 효율적으로 구문 분석하는 방법. 이러한 소스의 다른 형식으로 인해 구문 분석 프로세스가 복잡해지고 오류가 발생합니다. 많은 방법을 시도했지만 결과는 만족스럽지 않았습니다. 마지막으로 Composer를 통해 Zelenin/RSSGET 라이브러리를 설치 하여이 문제를 성공적으로 해결했습니다.

APPERRORMANAGER를 사용하여 API 오류를 우아하게 처리하는 방법APPERRORMANAGER를 사용하여 API 오류를 우아하게 처리하는 방법Apr 18, 2025 am 06:48 AM

RESTAPI 프로젝트를 개발할 때 API 통화의 오류 및 예외를 효과적으로 잡아서 처리하는 방법 : 일반하지만 어려운 문제가 발생했습니다. 처음에, 나는 내 코드에서 오류를 하나씩 처리하기 위해 전통적인 방법을 사용하려고했지만 코드의 복잡성을 증가시킬뿐만 아니라 유지 관리 및 확장이 어려워집니다. 다행스럽게도 ApperRormanager라는 도구를 찾았습니다.

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

DVWA

DVWA

DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는