Есть ли способ заставить Drush загрузить все необходимые зависимости для определенного модуля?

20

Например, если вы выполняете следующие команды:

drush dl views
drush en views views_ui views_export

При попытке включить модули представлений вы получите следующую ошибку:

Представления модулей не могут быть включены, потому что это зависит от следующих модулей, которые не могут быть найдены: ctools

Есть ли способ получить необходимую загрузку зависимостей модуля?

Camsoft
источник
На самом деле Drupal должен просто интегрировать композитор. Управление зависимостями было бы хорошо обработано тогда.
Дэвид
Новые версии Drush with drush en -yавтоматически загружают и включают зависимости.
tyler.frankenstein

Ответы:

18

Drush 5 и выше:

Более новые версии Drush (версия 5 и выше) спросят вас, хотите ли вы загрузить необходимые зависимости при включении ( drush en) модуля. Он также спросит, хотите ли вы загрузить сам модуль, если вы его еще не загрузили. В сочетании с опцией "-y" (например drush en views -y), все будет загружено и включено автоматически, не задавая дополнительных вопросов.

Обратите внимание, что автоматическая загрузка зависимостей может завершиться неудачей, если имя требуемого модуля не совпадает с именем его проекта на drupal.org. Для получения дополнительной информации см. Мой оригинальный ответ на Drush 4 ниже.

Оригинальный ответ (Drush 4):

Нет, это невозможно сделать. Проблема в том, что существует разница между модулем и проектом. Часто (но не всегда) название проекта совпадает с модулем (или одним из модулей), содержащимся в проекте. Один проект (например, Views) может содержать несколько модулей (views, views_ui, views_export). Пока drush dlзагружает проект , drush enвключает модуль .

Когда модуль объявляет зависимости, он объявляет зависимости от модулей, а не проектов. При выполнении drush enDrush может проверить, доступен ли необходимый модуль. Однако, если он недоступен, у Drush нет возможности узнать, какой проект загрузить. Чтобы Drush мог автоматически загружать необходимые проекты, необходимо выполнить работу в базовой инфраструктуре проектов / модулей, чтобы Drush мог получить сопоставление проектов и модулей. См. Также более разумное обращение с отсутствующими зависимостями .

marcvangend
источник
9

На самом деле, drush5 (все еще в разработке) имеет карту известных общих зависимостей (content.module, ctools, ...). Так что он действительно загружает ctools для вас в вашем примере.

Моше Вейцман
источник
6

это больше не проблема, поскольку последние версии drush делают это «автоматически»:

The following projects have unmet dependencies:[ok]
answers requires strongarm, references, nodereference_url, nodereference_count, eva
Would you like to download them? (y/n):
Алехандро Морено
источник
2

Некоторые модули или проекты включают скрипт drush make , который может загружать зависимости и устанавливать внешние библиотеки.

Однако в большинстве случаев это не так, и есть проблемы с вложением скриптов drush make. Это все еще стоит посмотреть с некоторыми из модулей, которые более сложны в настройке.

Джереми Френч
источник
1
Я думаю, что вы имеете в виду «Drush make» ( drupal.org/project/drush_make ), а не «Drush build». Но вы правы, поскольку в файле drush make перечислены проекты, необходимые для сборки, он может загружать зависимости.
marcvangend
2

Попробуйте модуль быстрого обновления . Он загрузит все недостающие проекты зависимостей для вас.

Вот цитата об этом (со страницы проекта модуля):

... обеспечивает быстрый способ пакетной установки нескольких новых проектов или всех отсутствующих проектов зависимостей.

Ядро Drupal предоставляет способ установить модуль или тему по одному, но вы можете установить несколько проектов через модуль быстрого обновления. Существует интерфейс администратора для поиска наиболее установленных проектов проще.

Кроме того, модуль быстрого обновления находит все недостающие проекты зависимостей, затем вы можете просто выбрать все из них в пользовательском интерфейсе администратора и установить их в пакетном процессе.

Модуль быстрого обновления зависит от модуля обновления и использует тот же рабочий процесс, что и модуль обновления. Таким образом, вы можете запускать обновления через страницу обновления администратора по адресу / admin / reports / updates / update.

Джей Чен
источник