Объединение enqueue js без влияния на зависимости

Я хочу объединить небольшие javascript-файлы, сохраняя при этом их зависимости от других сценариев. Там в любом случае?


Детали:

Новая версия BuddyPress enqueue 6-7 маленьких javascripts:

// Legacy 'bp-confirm', 'bp-widget-members', 'bp-jquery-query', 'bp-jquery-cookie', // 2.1 'jquery-caret', 'jquery-atwho' 

Например, bp-confirm – это всего лишь 1-строчный скрипт:

 jQuery(document).ready(function(){jQuery("a.confirm").click(function(){return confirm(BP_Confirm.are_you_sure)?!0:!1})}); 

Это просто безумие. Я хочу объединить их, но, к сожалению, некоторые другие javascript-enqueue имеют зависимость от этих маленьких js-файлов. Я не мог подумать об этом. Есть идеи?

Solutions Collecting From Web of "Объединение enqueue js без влияния на зависимости"

Из вашего комментария выше я прочитал

Это одна из причин, почему я ищу способ сказать wordpress: «Эй, я добавил эти js-файлы, не волнуйтесь». Это целая цель этого вопроса

Я думаю, что это совершенно справедливо, я + сделал свой Q, но проблема в том, что этого не существует, или лучше не существует чистого, канонического пути.

Как

  1. в первую очередь вам нужно посмотреть все зависимости 7 сценариев и принять к сведению это для будущего использования
  2. создать единый объединенный файл js для всех 7 скриптов
  3. hook wp_print_scripts с более поздним приоритетом, возможно, PHP_INT_MAX и внутри подключенного обратного вызова, проверьте, установлен ли и активирован BuddyPress, и если да:
    1. удалите 7 скриптов
    2. вставьте свой одиночный скрипт, используя в качестве зависимостей для него все зависимости 7 файлов (те, которые вы обнаружили в точке № 1)

Для этого WordPress добавит ваш единственный скрипт (содержащий 7 скриптов) и все необходимые зависимости, и все будет работать.

Если сторонний плагин BuddyPress добавит скрипт, используя один из сценариев BP как зависимость, например

 add_action( 'wp_enqueue_scripts', function() { wp_enqueue_script( 'thirdparty-bp-script', $js_url, array( 'bp-jquery-query' ) ); } ); 

все будет работать, потому что этот скрипт запускается на 'wp_enqueue_scripts' , и в то время скрипт BP, используемый как зависимость, помещается в очередь, поэтому WordPress не добавит его снова.

Проблемы

Что может быть неправильным в этом рабочем процессе? Я ничего не думаю о самом рабочем процессе, но если вы хотите использовать этот скрипт для публикации темы или для ее продажи, я действительно хочу отговорить вас от этого.

Причина в том, что скрипты BP, вероятно, были изменены в различных версиях плагина, сохраняя дескриптор скрипта. Таким образом, вам нужно будет вернуться в историю BuddyPress, взглянуть на эти сценарии по очереди и добавить разные версии вашего комбинированного сценария для каждой версии BP и вставить нужный скрипт, проверив версию BP.

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

ИМХО такого рода оптимизации, даже если это требуется в любой установке WordPress, где важна производительность (все?), Должны быть реализованы владельцем сайта, в вашем случае людьми, которые установят вашу тему, а не разработчиком темы.

В качестве примера, как насчет кого-то, возможно, захотите объединить все js, размещенные на сайте, а не только используемые в вашей теме onces и использовать CDN для этого?

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

Если вам интересно, вы можете добавить раздел в свои документы темы, где объясните, как объединить сценарии для повышения производительности, и пусть ваши пользователи выбирают, делать это или нет.

По моему честному мнению, я бы этого не сделал.

За и против

PRO'S Здесь действительно нет никакого профессионала , за исключением того, что несколько файлов меньше. Я даже не думаю, что вы собираетесь получить какое-то значительное время загрузки при объединении этих файлов

CON'S

Здесь много проблем

  • Вы не должны вносить прямые изменения в файлы buddypress. Вы потеряете все, что вы сделали при обновлении

  • Это означает, что вам нужно создать дочернюю тему или еще один плагин, чтобы отменить регистрацию и удалить из них тезисы после того, как они уже были успешно загружены, а затем создать новый js-файл со всем кодом и вставить в него.

  • Ненужная загрузка скриптов, которые не нужны. Я считаю, что существует метод безумия в создании количества js-файлов со стороны авторов buddypress. Я не знаю внутренней работы приятеля, но мой логический ум говорит мне, что это было сделано из-за условной нагрузки

  • Объединение всех этих скриптов может нарушить другие вещи, как вы сказали, зависимости. Возможно, вы даже окажетесь неожиданным образом на некоторых страницах

  • Сценарии переднего и заднего конца загружаются по-разному, поэтому скрипты для задней части и переднего конца не должны смешиваться.

Я думаю, что есть аспекты, которые я пропустил, но это самые основные основные моменты. Я бы действительно переосмыслил весь этот процесс и начал с обращения к авторам приятелей со следующими вопросами:

  • Почему количество файлов js, это делается для факта условной загрузки, скриптов для лицевой и задней частей и т. Д.

  • Можно ли объединить эти сценарии в будущих выпусках buddypress, если нет какой-либо аргумента в отношении количества одиночных js-файлов

Почему бы вам просто не зарегистрировать эти дескрипторы для 6 разных файлов и перерегистрировать эти дескрипторы в один комбинированный файл?

Я думаю, что если у вас есть 6 разных дескрипторов, указывающих на один файл, WordPress будет enque этот файл только один раз.

Таким образом, вы можете гарантировать, что ваши зависимости не сломаются.

Это возможное решение для вас?