Во-первых, напоминание. Запуск платформы Adobe Experience позволяет пользователям быстро и легко внедрять маркетинговые технологии на своих веб-сайтах и ​​в приложениях. Это тоже платформа. Поставщики маркетинговых технологий могут создавать расширения на платформе, которые упрощают предприятиям установку и настройку технологий поставщика на своих веб-сайтах.

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

Аргументы в пользу постоянной функциональности расширений

В нашей предыдущей статье Оптимизация сборки за счет минимального включения - в частности, в разделе За кулисами - мы обсуждали, как система сборки Launch определяет, что должно быть включено в выходные данные сборки. Если вы еще не читали, прочтите и вернитесь, когда закончите. Я подожду.

Сделанный? Хорошо, отлично. Очень важно понимать, что даже если ваше расширение установлено в свойстве Launch, только часть кода библиотеки вашего расширения может быть доставлена ​​на веб-сайт пользователя Launch.

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

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

Предположим также, что мы создаем расширение Launch, которое позволяет пользователям Launch быстро и легко устанавливать нашу технологию отслеживания взаимодействия на своих веб-сайтах. Разумно предположить, что наше расширение может предоставлять два типа действий, которые позволяют пользователю контролировать, когда запись должна начинаться и останавливаться: Начать запись и Остановить запись. Модуль библиотеки для нашего типа действия Начать запись может выглядеть следующим образом (при необходимости просмотрите документацию по типу действия):

var recorder = require('./recorder.js');
module.exports = function(settings) {
  recorder.startRecording();
};

Модуль библиотеки для нашего типа действия Stop Recording может выглядеть следующим образом:

var recorder = require('./recorder.js');
module.exports = function(settings) {
  recorder.stopRecording();
};

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

Используя то, что мы узнали в Оптимизация сборки с помощью минимального включения, мы можем сделать вывод, что если пользователь запуска использует типы действий Начать запись или Остановить запись, наша логика записывающего устройства будет включена в выходные данные сборки. Если пользователь не использует типы действий Начать запись или Остановить запись, наша логика записывающего устройства не будет включена в выходные данные сборки. Это должно казаться довольно разумным: если запись никогда не произойдет, то нет причин раздувать вывод сборки с помощью логики записи, которая никогда не принесет пользы.

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

Какой бы ни была причина отказа от управления запуском и остановкой записи, давайте предположим, что код записывающего устройства спроектирован таким образом, что он всегда просто начинает запись, как только он загружается на страницу, а затем прекращает запись, как только пользователь уходит от страница. Если бы это было так, наше расширение не предоставляло бы типы действий «Начать запись» или «Остановить запись». Но если наше расширение не предоставляет эти типы действий, код внутриrecorder.js никогда не будет включен в выходные данные сборки Launch!

По этой причине мы предоставляем возможность определять «главный модуль».

Определение основного модуля

Надеюсь, я ясно продемонстрировал случай, когда мы можем захотеть, чтобы фрагмент кода всегда был включен в вывод сборки Launch, даже если свойство не использует тип события, тип условия, тип действия или тип элемента данных из нашего расширения. . В этих случаях мы ссылаемся на модуль, который всегда хотим включить из нашего extension.json, используя атрибут main:

{
  ...
  "main": "src/lib/recorder.js"
}

При этом код внутри ofsrc/lib/recorder.js всегда будет включаться в выходные данные сборки свойства (при условии, что расширение установлено и добавлено в библиотеку) и выполняться при загрузке библиотеки Launch на веб-сайт.

С большой властью приходит большая ответственность

Преимущество главного модуля в том, что он всегда включается в выходные данные построения свойства. Недостатком основного модуля является то, что он всегда включается в выходные данные построения свойства. Видишь, что я там делал? Не используйте основной модуль только потому, что можете; используйте основной модуль только тогда, когда вам это абсолютно необходимо, чтобы обеспечить функциональность, которую пользователь Launch ожидает при установке вашего расширения. Мы изо всех сил стараемся, чтобы результаты сборки были минимальными и удобными для наших пользователей. Пожалуйста, поддержите нас в этих усилиях.

Если у вас есть связанные вопросы, не стесняйтесь задавать их в комментариях ниже. А теперь иди и создай что-нибудь отличное!