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

Composer 종속성 충돌을 방지하려면 교체 속성을 사용하세요.

Mar 12, 2021 am 11:28 AM
composer replace

튜토리얼 칼럼에서 작곡가의 의존성 충돌 방법을 피하기 위한 대체 속성의 사용을 소개하는 내용입니다. 도움이 필요한 친구들에게 도움이 되길 바랍니다! 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 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를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

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

Composer의 고급 기능: 별칭, 스크립트 및 충돌 해결 Composer의 고급 기능: 별칭, 스크립트 및 충돌 해결 Jun 03, 2024 pm 12:37 PM

Composer는 다음과 같은 고급 기능을 제공합니다. 1. 별칭: 반복 참조를 위해 편리한 패키지 이름 정의 2. 스크립트: 패키지 설치/업데이트 시 데이터베이스 테이블 생성 또는 리소스 컴파일에 사용되는 사용자 정의 명령 실행 3. 충돌 해결: 우선순위 규칙 사용 , 만족 제약 조건 및 패키지 별칭은 설치 충돌을 방지하기 위해 동일한 종속성 버전에 대한 여러 패키지의 다양한 요구 사항을 해결합니다.

PHP 마이크로서비스 컨테이너화의 민첩한 개발 및 운영 PHP 마이크로서비스 컨테이너화의 민첩한 개발 및 운영 May 08, 2024 pm 02:21 PM

답변: PHP 마이크로서비스는 민첩한 개발을 위해 HelmCharts로 배포되고 격리 및 확장성을 위해 DockerContainer로 컨테이너화됩니다. 자세한 설명: HelmCharts를 사용하여 PHP 마이크로서비스를 자동으로 배포하여 민첩한 개발을 달성하세요. Docker 이미지를 사용하면 마이크로서비스의 신속한 반복 및 버전 제어가 가능합니다. DockerContainer 표준은 마이크로서비스를 격리하고 Kubernetes는 컨테이너의 가용성과 확장성을 관리합니다. Prometheus 및 Grafana를 사용하여 마이크로서비스 성능 및 상태를 모니터링하고 경보 및 자동 복구 메커니즘을 생성하세요.

PHP에서 배열을 객체로 변환하는 일반적인 방법은 무엇입니까? PHP에서 배열을 객체로 변환하는 일반적인 방법은 무엇입니까? Apr 28, 2024 pm 10:54 PM

PHP 배열을 객체로 변환하는 방법: stdClass 클래스 사용, json_decode() 함수 사용, 타사 라이브러리(예: ArrayObject 클래스, Hydrator 라이브러리) 사용

PHP 코드 버전 제어 및 협업 PHP 코드 버전 제어 및 협업 May 07, 2024 am 08:54 AM

PHP 코드 버전 제어: PHP 개발에 일반적으로 사용되는 두 가지 버전 제어 시스템(VCS)이 있습니다. Git: 개발자가 협업 및 오프라인 작업을 용이하게 하기 위해 코드 베이스의 복사본을 로컬에 저장하는 분산 VCS입니다. Subversion: 코드 베이스의 고유한 복사본인 중앙 집중식 VCS가 중앙 서버에 저장되어 더 많은 제어 기능을 제공합니다. VCS는 팀이 변경 사항을 추적하고, 협업하고, 이전 버전으로 롤백하는 데 도움이 됩니다.

PHP 배열 페이지 매김에서 Redis 캐시를 사용하는 방법은 무엇입니까? PHP 배열 페이지 매김에서 Redis 캐시를 사용하는 방법은 무엇입니까? May 01, 2024 am 10:48 AM

Redis 캐시를 사용하면 PHP 배열 페이징 성능을 크게 최적화할 수 있습니다. 이는 다음 단계를 통해 달성할 수 있습니다. Redis 클라이언트를 설치합니다. Redis 서버에 연결합니다. 캐시 데이터를 생성하고 "page:{page_number}" 키를 사용하여 각 데이터 페이지를 Redis 해시에 저장합니다. 캐시에서 데이터를 가져오고 대규모 어레이에서 비용이 많이 드는 작업을 피하세요.

PHP CI/CD를 사용하여 빠르게 반복하는 방법은 무엇입니까? PHP CI/CD를 사용하여 빠르게 반복하는 방법은 무엇입니까? May 08, 2024 pm 10:15 PM

답변: CI/CD 파이프라인 설정, 자동화된 테스트 및 배포 프로세스를 포함하여 빠른 반복을 달성하려면 PHPCI/CD를 사용하십시오. CI/CD 파이프라인 설정: CI/CD 도구를 선택하고, 코드 저장소를 구성하고, 빌드 파이프라인을 정의합니다. 자동화된 테스트: 단위 및 통합 테스트를 작성하고 테스트 프레임워크를 사용하여 테스트를 단순화합니다. 실제 사례: TravisCI 사용: TravisCI를 설치하고, 파이프라인을 정의하고, 파이프라인을 활성화하고, 결과를 봅니다. 지속적인 전달 구현: 배포 도구를 선택하고, 배포 파이프라인을 정의하고, 배포를 자동화합니다. 이점: 개발 효율성을 높이고 오류를 줄이며 납품 시간을 단축합니다.

PHP 단위 테스트 및 지속적 전달 통합 PHP 단위 테스트 및 지속적 전달 통합 May 06, 2024 pm 06:45 PM

요약: PHPUnit 단위 테스트 프레임워크와 CI/CD 파이프라인을 통합하면 PHP 코드 품질을 향상하고 소프트웨어 제공을 가속화할 수 있습니다. PHPUnit을 사용하면 구성 요소 기능을 확인하기 위한 테스트 사례를 생성할 수 있으며 GitLabCI 및 GitHubActions와 같은 CI/CD 도구는 이러한 테스트를 자동으로 실행할 수 있습니다. 예: 테스트 케이스로 인증 컨트롤러의 유효성을 검사하여 로그인 기능이 예상대로 작동하는지 확인합니다.

PHP 웹 서비스 개발 및 API 설계 유지 관리 및 업데이트 PHP 웹 서비스 개발 및 API 설계 유지 관리 및 업데이트 May 06, 2024 pm 02:57 PM

PHP 웹 서비스 및 API를 유지 관리하고 업데이트하려면 다음 방법을 구현해야 합니다. 종속성을 업데이트하여 최신 보안 패치를 보장합니다. 버전 관리를 통해 코드베이스 변경 사항을 추적하고 개발에 협력하세요. 업데이트가 기능에 영향을 주지 않는지 확인하기 위한 자동화된 테스트입니다. 지속적인 통합은 자동화된 프로세스를 통해 코드 검증을 보장합니다. 로깅 및 모니터링은 문제를 식별하고 해결하는 데 도움이 됩니다. 취약점을 방지하려면 항상 보안 패치를 업데이트하세요.

See all articles