마 젠토 2 : 모듈의 composer.json에서 "시맨틱 버전 관리"의존성을 지정하는 방법


10

Magento 2의 개발 및 배포에는 버전 관리를위한 공식적인 프로세스가 포함되어 있으며 , 이전 버전과 호환되는 기능의 변경 사항에 따라 주요 Magento 모듈의 주요 버전과 부 버전이 충돌 할 수 있습니다.

Magento 모듈 개발자는 어떻게 composer.json 파일에서 요구 사항 목록을 작성해야합니까? 핵심 Magento 코드를 사용하고 require:...composer.json에 줄을 추가 할 때마다 모듈을 수동으로 봐야 합니까? 아니면 나를 위해 할 수있는 자동화 된 도구가 있습니까?

내 버전을 어떻게 지정 composer.json합니까? 내가 개발 한 특정 모듈 버전이어야합니까? 아니면 어떤 종류의 와일드 카드가 필요합니까? 아니면 트레이드 오프를 기반으로 결정을 내려야합니까? 그렇다면, 각 버전의 버전 지정에 관련된 트레이드 오프는 무엇입니까?

이 기능에 대한 높은 수준의 설명이 많이 있습니다.하지만 실제 개발자가 수행해야 할 실제 단계 및 / 또는 해당 단계의 실제 결과는 확실하지 않습니다.

답변:


9

핵심 Magento 코드를 사용하고 composer.json에 require : ... 줄을 추가 할 때마다 수동으로 모듈을 살펴 봐야합니까?

예, 코드에서 핵심 모듈의 항목을 사용할 때마다 작곡가의 요구에 추가해야합니다. 코어 모듈 이후에로드 순서를 원할 module.xml경우 시퀀스 섹션 의 파일에 추가하는 것이 좋습니다 .

아니면 나를 위해 할 수있는 자동화 된 도구가 있습니까?

나는 아직 오지 않았다. 있으면 알려주세요. 상당히 정교한 도구 여야하고 상당한 테스트 범위가 필요할 수 있으며 다른 버전의 매트릭스를 실행하여 작업 세트를 생성합니다.

composer.json에 포함 할 버전을 어떻게 지정합니까? 내가 개발 한 특정 모듈 버전이어야합니까? 아니면 어떤 종류의 와일드 카드가 필요합니까? 아니면 트레이드 오프를 기반으로 결정을 내려야합니까? 그렇다면, 각 버전의 버전 지정에 관련된 트레이드 오프는 무엇입니까?

버전 번호를 정의하는 옵션

  1. 100.0.2
    이 특정 버전에서만 작동

  2. 100.0.*
    *와일드 카드이며 모든 버전 번호로 대체 할 수있다 100.0.0, 100.0.1, ...,100.0.120

  3. ~100.0.2
    2 만 그렇게까지 갈 수있는 와일드하게 100.0.2, 100.0.3, ...,100.0.120

  4. ^100.0.2
    어떤 101까지 출시 있도록합니다 그래서 100.0.2, 100.0.3, ..., 100.1.0,100.2.5

옵션 2-4의 경우 안정성 설정에서 허용하는 경우 다음과 같은 버전도 포함됩니다 100.0.1-beta

실용

옵션 1.)은 가장 신중한 것입니다. 개발 한 버전을 알고이 특정 버전에서만 작동하도록 허용합니다. 모듈은 해당 버전의 특정 모듈과 함께 만 설치할 수 있습니다. 다른 모든 설치 / 업그레이드 시도는 설치 가능한 구성 요소 세트를 찾을 수 없음을 강조하는 작성기 메시지와 함께 실패합니다.

옵션 2) 옵션 3에서 다룬 것처럼 옵션이 아닌 것으로 생각할 수 있습니다. ~100.0.0

옵션 3) 새로운 기능이 도입되지 않는 한 호환 가능

옵션 4) 주요 변경 사항이없는 한 호환 가능

트레이드 오프

1 확장 프로그램은 Magento 모듈의 1 버전에서만 작동합니다 (기술적으로 모듈에 변경 사항이없는 경우 버전 번호가 증가하지 않아야하며 여러 Magento 프로젝트 버전은 이론적으로 동일한 버전의 동일한 Magento 코어 모듈을 포함 할 수 있습니다). 이것을 보지 못했고 Magento 쪽에서 일부 프로세스 변경이 필요한 것처럼 보입니다 .) 1 버전의 Magento 코어 모듈과 밀접하게 연결되어 있기 때문에 호환성을 유지하려면 많은 릴리스와 자체 확장 버전이 필요합니다.

3-4 확장은 여러 버전의 Magento에서 작동하며 Magento가 새 버전을 릴리스 할 때마다 다른 확장 버전을 릴리스 할 필요는 없습니다. 여기서 단점은 자신의 코드와 호환되지 않는 Magento에서 변경 사항이 도입 될 수 있지만 호환성을 주장한다는 것입니다. Magento의 자체 모듈 버전에 대한 시맨틱 버전 관리에 대한 정의가 제한된 범위를 가진 @api주석 (이 GitHub 문제 에서 더 자세히 설명 됨 )으로 만 확장되기 때문에 이러한 위험은 실제로 발생 합니다.

tl; dr; 시맨틱 버전 관리 (Semantic Versioning)의 작동 방식
100.0.2을 유지하기 위해 안전하고 많은
^100.0.2릴리스를 지원하십시오 @api. 승인 된 클래스와 메서드를 사용하여 100 %의 확장명을 가진 경우 이것은 분명한 선택입니다.


고마워요, 훌륭합니다! 빠른 질문 : 정확한 버전을 지정하면 Magento 모듈의 버전이 변경 될 때 확장 프로그램이 업그레이드를 차단할 것이라는 보장이 옳습니까?
Alan Storm

매우 정교하게 !!!
전자 상거래 구상

1
예 @AlanStorm 만약 당신이 작곡가 오류 메시지가 표시됩니다 (어떤 젠토의 웹 설치 마법사 후드 아래에 수행도) 당신 작곡가 업데이트 -이 트윗의 스크린 샷을 참조 twitter.com/foomanNZ/status/737289157769302016
Fooman에서 크리스토프을

3

0.1.0-alpha1 -> 0.1.0-alpha2, 0.1.0-alpha3,모듈의 안정성을 기반으로 할 수 있습니다 . 설명서에서 공유 한대로 요구 사항은 다음과 같습니다.

"require": {
    "myexamplestore/product-bundle": "2.0.0-RC1",
    "myexamplestore/acme-extension": "~1.0"
    }

업데이트를 기반으로 다음과 같이 업데이트되어야합니다.

"require": {
    "myexamplestore/product-bundle": "2.4.0-RC1",
    "myexamplestore/acme-extension": "~2.0"
    }

아직 자동화 된 시스템이 없다고 생각하지만 문서에 따라이를 따르는 것이 매우 중요합니다.

그러나 모듈에 사소한 버그 수정이 있으면 PATCH를 사용해야합니다.

인용하다

패치는 이전 버전과 호환되는 버그 수정을 나타냅니다.

당신은 정답이 다소 불분명하지만, 1 년 전쯤에 업데이트 된 것을 볼 수 있습니다. 그러나 이것이 바로 그 방법입니다.


그러나 답변 해 주셔서 감사합니다. 이는 이미 존재하는 모든 모호한 정보와 동일합니다. 모듈과 마 젠토 모듈러가 무엇인지 명확하지 않습니다. 각 버전 조정의 결과가 무엇인지 확실하지 않습니다 (업그레이드 차단? 업그레이드 허용, @api 위험 도입 등).
Alan Storm

예, 당신에게 동의합니다. 제가 보는 한 가지 이유는 그것들이 매우 구식이기 때문입니다.
전자 상거래 구상
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.