Не загружайте jQuery на сайт Drupal 8 - даже если он зависит от модулей?
Как я могу остановить загрузку jQuery в Drupal 8, даже если модули, использующие jQuery, находятся на странице?
У меня есть существующее руководство по стилю, которое я размещаю на сайте Drupal 8. У меня уже есть весь javascript, включая jQuery, как часть руководства по стилю, и я хочу, чтобы это было отдельно от Drupal.
Для анонимных пользователей все работает нормально. Однако пользователи с правами администратора имеют доступ к панели инструментов администратора. Это загружается в собственную версию jQuery Drupal, которая конфликтует с руководством по стилю и приводит к поломке панели инструментов администратора.
Я попытался добавить это в файл библиотек моей темы:
core/jquery: false
core/jquery.once: false
core/jqueryui: false
При проверке страницы оказалось, что некоторые ссылки на jQuery заблокированы, но не все из них:
Однако, когда я удаляю свои записи из файла библиотек моей темы, я вижу, что на самом деле загружаются все те же файлы jQuery, поэтому я на самом деле не думаю, что это чего-то достигнет.
Я знаю, что обычно никто не загружает jQuery самостоятельно и просто использует версию Drupal, но для руководства по стилю требуется последняя версия, а также используется другими приложениями, поэтому я не могу ее сильно изменить.
2 answers
Вы должны иметь возможность изменять файлы JavaScript, включенные на странице, с помощью реализации hook_js_alter()
.
В НАЗВАНИИ ТЕМЫ.тема:
<?php
function THEMENAME_js_alter(&$javascript, \Drupal\Core\Asset\AttachedAssetsInterface $assets) {
$javascript['core/assets/vendor/jquery/jquery.min.js']['data'] = '';
$javascript['core/assets/vendor/jquery.ui/ui/core-min.js']['data'] = '';
$javascript['core/assets/vendor/jquery.ui/ui/widget-min.js']['data'] = '';
$javascript['core/assets/vendor/jquery-form/jquery.form.min.js']['data'] = '';
$javascript['core/assets/vendor/jquery.cookie/jquery.cookie.min.js']['data'] = '';
$javascript['core/assets/vendor/jquery.ui/ui/mouse-min.js']['data'] = '';
$javascript['core/assets/vendor/jquery.ui/ui/draggable-min.js']['data'] = '';
$javascript['core/assets/vendor/jquery.ui/ui/resizable-min.js']['data'] = '';
$javascript['core/assets/vendor/jquery.ui/ui/dialog-min.js']['data'] = '';
$javascript['core/misc/dialog/dialog.jquery-ui.js']['data'] = '';
$javascript['core/assets/vendor/jquery-joyride/jquery.joyride-2.1.min.js']['data'] = '';
}