Ошибка типа: getCartParam не является функцией в M2.0.X, а ошибка типа: корзина не является функцией в M2.1.X


Работа с Magento 2.0.X После успешного переопределения vendor/magento/module-checkout/view/frontend/web/template/minicart/content.html в моем расширении приводит к ошибке в консоли браузера

Т.е. Ошибка типа: getCartParam не является функцией.

И после некоторого RND я нашел решение заменить getCartParam на cart, и оно работает нормально.

Но когда я тестирую свое расширение в M2.1.X, оно выдает мне ошибку

Т.е. Ошибка типа: корзина не является функция

А затем я возвращаюсь обратно cart к getCartParam, и это работает.

Итак, мне нужно разработать два разных расширения для М2.0.X или М2.1.X для достижения совместимости?

Есть ли у них какая-либо разница в коде между М2.0.X и М2.1.X?

Почему это происходит?

Author: chirag, 2016-11-29

1 answers

Итак, мне нужно разработать два разных расширения для M2.0.x или M2.1.x для достижения совместимости?

Есть ли у них какая-либо разница в коде между M2.0.X и M2.1.X?

Короткий ответ: Да и да много.

Длинный ответ (цитируя Винаи, который недавно дал мне отличное объяснение по этому поводу):

Отказ от ответственности: это отражает понимание вещей (которое может быть неполным)

При разработке модуля для Magento 2, вам нужно добавить зависимости композитора от модуля, от которого зависит ваш модуль. В вашем случае одной из таких зависимостей является magento/module-checkout.

Зависимость должна быть точной версией, если вы используете методы/константы/классы без @api и в основной версии, если вы используете только методы с @api.

Если модуль использует что-либо не @api (имя класса, метод, константу в не @api классе...), модуль должен зависеть от точной версии зависимость.

Например, для Magento 2.1.2:

"require": {"magento/module-checkout":"100.1.2"}

Если модуль использует только что-то помеченное @api из модуля, достаточно зависеть только от основной версии.

Например:

"require": {"magento/module-checkout":"^100.1.2"}

Если модуль использует наблюдателей или компоненты пользовательского интерфейса JS, то следует добавить зависимость от младшей версии:

Например:

"require": {"magento/module-checkout":"100.1.*"}

Итак, как разработчик расширений, вот шаги, которые необходимо предпринять после Magento обновление:

  1. обновите Magento (для этого может потребоваться разрешить новую версию в json композитора модуля)
  2. запустите тесты, которые вы написали для своего модуля
  3. если они пройдут, опубликуйте новую версию модуля с обновленной зависимостью. Теперь клиенты, использующие модуль, могут обновить Magento
  4. если они не пройдут, исправьте проблему и перейдите к 2

В идеале, ЕСЛИ (большое если) все добавят соответствующие зависимости, установка не может быть обновлена прежде чем все модули будут совместимы с новой версией.

Этот процесс будет не таким простым, как кажется. Теоретически поставщики расширений будут использовать версии develop ветви/бета-версии/RC для запуска своих тестов модулей перед выпуском и сокращения этой фазы.

 1
Author: Raphael at Digital Pianism, 2016-11-29 10:55:21