Jump to main content Jump to doc navigation

Новое в MODX 2.4 это возможность определять зависимости пакетов в Транспортных пакетах. Если они установлены, пользователь не сможет установить пакет, пока все зависимости не будут выполнены.

Добавление пакетных зависимостей в вашу сборку

Пакетные зависимости добавляются к атрибутам Пакета, которые уже используются для указания файла лицензии license, readme и журнала изменений changelog, обычно добавляются в конец вашего скрипта сборки. Если вы используете другой способ создания пакетов, вам может потребоваться свериться с этой документацией, чтобы узнать, поддерживает ли она эти атрибуты и как вы можете определить там зависимости.

$builder->setPackageAttributes(array(
    'license' => file_get_contents($sources['docs'].'license.txt'),
    'readme' => file_get_contents($sources['docs'].'readme.txt'),
    'changelog' => file_get_contents($sources['docs'].'changelog.txt'),
    'setup-options' => array(
        'source' => $sources['build'].'setup.options.php',
    ),
));

Чтобы добавить зависимости пакетов, просто добавьте опцию requires, указав массив имен пакетов и минимальные требования к версии.

Например, для указания необходимости пакета FormIt версии 2.2 или выше:

$builder->setPackageAttributes(array(
    'license' => file_get_contents($sources['docs'].'license.txt'),
    'readme' => file_get_contents($sources['docs'].'readme.txt'),
    'changelog' => file_get_contents($sources['docs'].'changelog.txt'),
    'setup-options' => array(
        'source' => $sources['build'].'setup.options.php',
    ),
    'requires' => array(
        'formit' => '>=2.2.0',
    )
));

Вы можете указать больше пакетов в списке, просто добавив дополнительные элементы в этот массив. Вы также можете добавить проверки для modx и php, чтобы потребовать конкретную версию MODX или PHP.

Имейте в виду, что эти зависимости пакетов работают только в MODX 2.4 и выше. Если вы собираетесь поддерживать более старые версии, вы можете добавить дополнительную проверку в Резольвер или добавить инструкции в свою документацию.

Есть разные способы указать номера версий, каждый из которых имеет разное значение. Вы также можете добавить несколько ограничений, разделив их запятыми - но без пробелов, как в '>=2.0,<3.0'. Пробел после запятой текущий парсер не отбрасывает, и проверка молча не проходит.

Токен Что это значит Пример строки для указания версии
~ Требуется как минимум указанная версия, до следующей значимой версии ~1.0 - это >=1.0,<2.0; ~1.3.0 - это >=1.3.0,<1.4.0
n.* Подстановочный знак для определенной части строки версии 1.* - это >=1.0,<2.0
<, <= Не выше этой версии <2.0 или <=1.9.9
>, >= Не ниже этой версии >=2.2.0
!= Любая версия, кроме этой !=2.0
точная версия Ровно эта версия 2.2.0
* Любая версия подойдет

Не используйте одиночный оператор ! («не эта версия») и текстовые операторы eq, ne, le, ge: парсер понимает только символы из таблицы выше, поэтому всё остальное либо никогда не совпадает, либо, в случае одиночного !, передаётся в PHP version_compare(), который на PHP 8.1+ бросает ValueError и может прервать запрос установки.

Как невыполненные зависимости блокируют установку

Перед установкой MODX проверяет каждый элемент requires по установленным пакетам (плюс специальные ключи modx и php). Если хотя бы одно требование не выполнено, запрос установки прерывается и в лог пишется сообщение package_dependency_unsatisfied.

Атрибут пакета abort_install_on_unsatisfied_dependency (по умолчанию true) управляет этим поведением: задайте его false в том же массиве атрибутов, что и requires, чтобы установка продолжилась - сообщение о невыполненной зависимости по-прежнему запишется в лог, но больше не останавливает пакет.

Скачивание зависимостей из менеджера

В диалоге установки пакета требования перечислены на вкладке Dependencies, и для каждого указано, установлено ли оно уже или его можно скачать у провайдера. Действие Download ищет зависимость у зарегистрированных провайдеров и устанавливает найденное.

Известное ограничение: резолвер в текущей версии всегда сообщает, что разрешение не удалось, - см. #17065. Поэтому после скачивания зависимости установка всё равно остаётся заблокированной, пока зависимость не будет установлена отдельно (или атрибут abort_install_on_unsatisfied_dependency не станет false).

Support the team building MODX with a monthly donation.

The budget raised through OpenCollective is transparent, including payouts, and any contributor can apply to be paid for their work on MODX.

Backers

  • modmore
  • STERC
  • Digital Penguin
  • Jens Wittmann – Gestaltung & Entwicklung
  • CrewMark
  • Fabian Christen
  • Sepia River Studios
  • Dannevang Digital
  • Alex
  • A. Moreno
  • Chris Fickling
  • Stéphane Jäggi
  • Murray Wood
  • Anton Tarasov
  • JT Skaggs
  • deJaya
  • Lefthandmedia
  • eydolan
  • Following Sea
  • Guido Gallenkamp
  • YJ
  • Raffy
  • Snow Creative
  • Nick Clark
  • Guest
  • Helen
  • krisznet
  • Yanni
  • Richard

Budget

$194 per month—let's make that $500!

Learn more