Liltag - Простой Менеджер Тегов Для Вашего Сайта
Я продолжаю пилить свой open-source проект Econumo и в какой-то момент мне потребовалось добавлять скрипты аналитики на публичную версию сайта, но при этом не сохраняя их в репозитории.
Можно было бы использовать отдельный шаблон для своего продакшена, но проблема в том, что я распространяю единый образ с уже собранной, минифицированной статикой, что делает подмену шаблона неудобной. Другой вариант - это использовать Google Tag Manager или его альтернативы. Однако они представляют из себя более сложные системы и могут быть GDPR не совместимы. Это может не подходить для некоторых пользователей open-source версии.
В общем, я подумал, что проще сделать свою облегченную версию Tag Manager’а, которую можно гибко настраивать через JSON-конфиг. Что подходит как и для моих нужд, так и для open-source версии.
Так появился Liltag.
Успеть за 20 минут
Осознание, что мне нужен такой инструмент, пришло мне в голову по дороге из офиса на поезд. Поезд из даунтауна до дома едет примерно 20 минут. С учетом того, что у меня с собой был только телефон, программирование казалось проблематичным. Однако я подумал, что можно же попросить помощи у ChatGPT. И за несколько запросов я получил код, содержимое репозитория и документацию. Магия!
Первая версия библиотеки была готова за первую поездку и даже начала работать к моему возвращению домой. За следующие пару дней мы с ChatGPT брейнштормили и дорабатывали либу: улучшили програмный интерфейс, сделали небольшой рефакторинг, добавили автоматическую сборку на Github Actions и обновили документацию.
Примерно после трех поездок на поезде и финальной обкатки, я выложил библиотеку в open-source.
Самое сложное оказалось - определиться с набором функционала, так как хотелось сделать простое, но в тоже время гибкое решение. И мне кажется, что мне это удалось. А что касается качества полученного кода - над этим точно можно еще поработать, но даже сейчас это уже достойный уровень.
Что умеет Liltag
- Может загружать скрипты, стили и HTML-компоненты на ваш сайт по похожему принципу, что и Google Tag Manager.
- В конфиге можно указать, в какую часть страницы будет вставлен тег (head, body top, or body bottom).
- Тег инициализируется, как реакция на выбранное событие (об этом чуть ниже).
Установка Liltag
Простое подключение Liltag
<script src="//deeravenger.github.io/liltag/dist/liltag.min.js" defer></script>
<script>
const lilTag = new LilTag("path_or_url/to/liltag_config.json");
lilTag.init();
</script>
Вы можете скачать liltag.min.js и подключить его локально.
Асинхронное подключение Liltag
<script>
(function () {
const script = document.createElement("script");
script.src = "//deeravenger.github.io/liltag/dist/liltag.min.js";
script.async = true;
script.onload = function () {
const lilTag = new LilTag("path_or_url/to/liltag_config.json");
lilTag.init();
};
document.head.appendChild(script);
})();
</script>
Конфигурация Liltag
Загрузка конфига по URL
При установке Liltag, вы можете указать URL конфига, который будет загружен и использован для инициализации тегов.
<script src="//deeravenger.github.io/liltag/dist/liltag.min.js" defer></script>
<script>
const lilTag = new LilTag("path_or_url/to/liltag_config.json");
lilTag.init();
</script>
Пример конфига:
{
"tags": [
{
"id": "analytics",
"trigger": "pageLoad",
"content": "<script type=\"text/javascript\">console.log('Analytics script loaded.');</script>",
"location": "head"
}
]
}
Конфигурация Liltag в коде
const lilTag = new LilTag({
"tags": [
{
"id": "analytics",
"trigger": "pageLoad",
"content": "<script type=\"text/javascript\">console.log('Analytics script loaded.');</script>",
"location": "head"
}
]
});
lilTag.init();
Кэширование конфига
Liltag может кэшировать конфигурацию, что позволяет избежать лишних запросов к серверу и улучшает производительность.
const lilTag = new LilTag('path_or_url/to/liltag_config.json');
lilTag.enableCache(7200); // Enable caching with a TTL of 2 hours (7200 seconds)
lilTag.init();
Полный конфиг
Каждый тег в конфиге может содержать следующие поля:
- id: Уникальный идентификатор тега.
- trigger: Событие, на которое будет инициализироваться тег. Доступны следущие события:
pageLoad
: Инициализация по загрузке страницы.domReady
: Инициализация по готовности DOM.timeDelay
: Инициализация с задержкой в секундах.elementVisible
: Инициализация по видимости элемента на странице.customEvent
: Инициализация по произвольному событию.
- content: HTML-компонент, который будет вставлен на страницу.
- location: Позиция, в которую будет вставлен тег:
head
: В head.bodyTop
: В body top.bodyBottom
: В body bottom.
- delay (optional): Задержка инициализации в секундах. Используется только если trigger - timeDelay.
- selector (optional): Селектор элемента, по которому будет происходить инициализация. Используется только если trigger - elementVisible.
- eventName (optional): Имя события, по которому будет происходить инициализация. Используется только если trigger - customEvent.
Заключение
За последний год ChatGPT (да и другие нейросети) стали ощутимо лучше держать контекст и понимать, что от них требуется. Я постепенно вижу, как начинает трансформироваться и мой процесс разработки, адаптируя разные инструменты. На данный момент это ощущается как работа с джуном, который может очень быстро искать и предлагать разные способы решения, но при этом пока не может самостоятельно придумывать и реализовывать что-то новое.