Включать внешние библиотеки JS/CSS в модуль?
Что такое эквивалент Drupal 8 для включения внешних библиотек (таких как сайты/все/библиотеки) для пользовательских модулей?
3 answers
Цитирование этого сообщения в блоге
Основные изменения API в Drupal 8
Функции drupal_add_js() и drupal_add_css() для ручного включения файлов JS/CSS были удалены в пользу определений библиотек, которые правильно объявляют их зависимости. В результате этого все модули, а также темы должны объявлять свои библиотеки, чтобы включать файлы JS и/или CSS. Во время разработки D8 способ объявления библиотеки эволюционировал от переименованного информационный крюк (hook_library_info()), чтобы, наконец, использовать YAML (как и во многих других местах в D8) , описав библиотеки в *.библиотеки.файлы yml. Информационный крючок, наконец, был полностью удален. Смотрите запись об изменении для получения дополнительной информации . Новый крючок hook_library_info_alter(), конечно, все еще существует.
Еще одним большим изменением является использование Composer для управления зависимостями, как это делают многие другие современные фреймворки. Хотя Composer предназначен в первую очередь для библиотек PHP, его можно использовать для библиотек JS тоже. Использование Composer не только избавляет вас от необходимости вручную загружать библиотеку с Github и т. Д., А затем вручную извлекать и загружать файлы на ваш сервер, Но также устраняет источник ошибок при размещении файлов в правильной структуре каталогов. (Примечание: Интеграция Composer еще не полностью завершена, см.: https://www.drupal.org/node/2372815)
Модуль.библиотеки.файл yml является большим улучшением в Drupal 8. Вы можете определить файлы css и js, необходимые для одной задачи в вашем модуле, чтобы другие модули могли их использовать.
Но это не должно делать модуль библиотек полностью избыточным. Для внешних библиотек, которые не относятся к одному модулю, все же может быть целесообразно использовать папку общей библиотеки:
Чтобы ответить на этот вопрос, эквивалентом в drupal 8 является то же, что и в drupal 7. Но мы должны посмотреть, как разработчики модулей будут использовать новые возможности, и сколько останется для общих библиотек.
Редактировать:
Многих людей смущает название этих 2 крючков:
- hook_library_info()
- hook_libraries_info()
Первый из них находится в ядре drupal 7 и был заменен новой системой библиотек в drupal 8. Второй - из библиотек модуля contrib API и все еще жив.
Вы не указали, хотите ли вы, чтобы библиотека обслуживалась через CDN, но для многих людей это может быть так. Вот пример с Fontawesome (библиотека значков webfont).
Это из темы, но принцип точно такой же с модулем.
мифема.библиотеки.yml:
[...]
fontawesome:
js:
"//kit.fontawesome.com/1abc23d4ef.js": { type: external }
мифема.информация.yml:
[...]
libraries:
- mytheme/fontawesome
(Затем очистите кэш.)
Если вы включаете CSS, вам нужно указать его категорию SMACSS (базовая, компонент, тема и т.д.), который управляет порядком его загрузки.
Обратите внимание, что я не на самом деле уверен, что type: external
делает (он все еще работает без). Если кто-нибудь сможет уточнить, я отредактирую ответ.
Дальнейшее чтение:
- Определение библиотеки активов (Drupalize.me - платный доступ)
- Прикрепить библиотеку (Drupalize.me - платный доступ)