Добавление библиотеки (library) в Drupal 8

В Drupal 7 для добавления библиотеки нужно было в модуле имплементировать hook_library() и в нем описать все css и js файлы, подключаемые библиотекой. В Drupal 8 библиотеки подключаются с помощью *.libraries.yml файлов, которые должны располагаться в корневой директории модуля или темы. Также в ядре самого друпала имеется набор библиотек и располагаются они в /core/core.libraries.yml.

К примеру библиотека modernizr описывается следующим образом в файле core.libraries.yml


modernizr:
    remote: https://github.com/Modernizr/Modernizr
    version: v2.6.2
    js:
      assets/vendor/modernizr/modernizr.min.js: { every_page: true, preprocess: 0, scope: header, weight: -21 }


Для подключения этой библиотеки достаточно ее прикрепить к рендерному массиву в свойстве '#attached', указав при этом строку состоящую из имени модуля (либо core для библиотек ядра) и через слеш - машинное имя самой библиотеки:


$render_element['#attached']['library'][] = 'core/modernizr';

Также имеется возможность подключения библиотеки к теме. Для этого нужно в mytheme.libraries.yml описать нужную библиотеку и затем в файле mytheme.info.yml ее добавить:


core: 8.x
libraries:
  - mytheme/base
ckeditor_stylesheets:
  - css/ckeditor-iframe.css

Таким образом мы добавляем библиотеку base из mytheme.libraries.yml и также дополнительно подключаем свой css файл для ckeditor.

При необходимости можно добавлять зависимости от библиотек других модулей или ядра:


mymodule:
  version: VERSION
  js:
    js/custom.js: {}
  css:
    theme:
      css/custom.css: {}
  dependencies:
    - core/jquery
    - core/drupal
    - core/drupal.ajax

В этой библиотеке подключаются кастомные js и css файлы и подтягиваются зависимостями библиотеки ядра: jquery, drupal и drupal.ajax.

Все имена библиотек из модулей,входящих в ядро друпала, начинаются на drupal и затем после точки следует имя модуля , а затем имя самой библиотеки. К примеру для модуля color библиотека preview имеет имя 'drupal.color.preview'.