Magento 2: Як вказати залежності "семантичної версії" в composer.json мого модуля


10

Розробка та розгортання Magento 2 включає в себе формальний процес версії , де основні та другорядні версії основних модулів Magento будуть накопичуватися на основі змін в сумісних функціях.

Як я, як розробник модуля Magento, будувати список вимог у власному файлі composer.json? Чи потрібно мені вручну переглядати мій модуль кожного разу, коли я використовую фрагмент основного коду Magento та додаю require:...рядок до composer.json? Або є автоматизований інструмент, який може зробити це для мене?

Як вказати версію, яку потрібно включити до свого composer.json? Чи повинна це бути конкретна версія модуля, проти якої я розроблений? Або я повинен задіяти якусь підстановку? Або мені потрібно приймати рішення на основі компромісів? Якщо так, то які компроміси пов'язані з кожним стилем версії?

Існує багато описів цієї функції на високому рівні, але там незрозуміло, які практичні кроки повинен зробити тут робочий розробник та / або які фактичні наслідки цих кроків.

Відповіді:


9

Чи потрібно мені вручну переглядати мій модуль кожного разу, коли я використовую фрагмент основного коду Magento та додаю рядок вимагати: ... до composer.json?

Так, кожен раз, коли ви використовуєте що-небудь з основного модуля, вам потрібно додати його до вимог композитора. Оскільки ви, мабуть, хочете, щоб ваше замовлення завантажувалося після основного модуля, я б також запропонував додати його у свій 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 Ваше розширення працює лише для 1 версії модуля Magento (технічно, якщо в модулі немає змін, номер версії не повинен збільшуватися, і кілька версій Magento Project теоретично можуть включати той же основний модуль Magento з тією ж версією. Практично я я цього не бачив і схоже, що це вимагає певних змін у процесі Magento (див. тут). Оскільки ви настільки тісно пов'язані з 1 версією основного модуля Magento, ви отримуєте безліч версій та версій власного розширення, якщо хочете залишатися сумісними.

3-4 Ваше розширення працює з декількома версіями Magento, і вам не потрібно випускати різні версії розширення щоразу, коли Magento випускає нову версію. Мінусом тут є те, що ви заявляєте про сумісність, навіть якщо в Magento можна було внести зміни, несумісні з вашим власним кодом. Цей ризик є реальним, оскільки визначення Magento щодо семантичної версії для власних випусків модулів поширюється лише на те, що позначено @apiанотацією (детальніше про це у цьому випуску GitHub ) з обмеженою сферою застосування.

tl; dr;
100.0.2Безпечно грайте, безліч випусків, щоб підтримувати для вас
^100.0.2Semantic Versioning, як це має працювати, менше випусків для вас, але з більш високим ризиком через обмежений обсяг @apiанотованих класів та методів. Якби у вас було розширення, яке на 100% використовує санкціоновані класи та методи, це був би очевидний вибір.


Дякую, це чудово! Швидке запитання: чи правильно сказати, що вказівка ​​точної версії в значній мірі гарантує, що ваше розширення заблокує оновлення, якщо / коли модуль Magento змінить свою версію?
Алан Шторм

Дуже добре розроблений !!!
Передбачте електронну комерцію

1
@AlanStorm так, якщо ви оновлюєте композитор (що також робить майстер веб-налаштування Magento під кришкою), ви отримаєте повідомлення про помилку композитора - дивіться скріншоти в цьому
твітері

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, якщо у вашому модулі є незначні виправлення помилок.

Звертатися до

PATCH вказує на зворотні сумісні виправлення помилок

Ви праві, що відповідь трохи незрозуміла, але ви можете бачити, що вона була оновлена ​​ще близько 1 року. Але так воно і є.


Дякую за відповідь, однак це рівнозначно всій розпливчастій інформації, яка вже є там. Незрозуміло, що таке ваші модулі проти моделей Magento. Незрозуміло, який результат коригування кожної версії (блокувати оновлення? Дозволити оновлення, але ввести ризик @api тощо).
Алан Шторм

Так, я згоден з вами, одна з причин, яку я бачу, - це те, що вони дуже застаріли.
Передбачте електронну комерцію
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.