
EverShop: когда TypeScript встречается с eCommerce
Помните то чувство, когда открываешь код очередной eCommerce-платформы? Тысячи строк PHP, запутанная структура, документация из 2012 года, и ты понимаешь: следующие три месяца будут весёлыми. Я прошёл через это несколько раз, и каждый раз думал — неужели никто не может сделать нормальный магазин на современных технологиях?
Оказывается, может. EverShop — это то, что происходит, когда разработчики устают от легаси и решают построить eCommerce с нуля, используя TypeScript, React и GraphQL. Звучит слишком хорошо? Давайте разбираться.
Почему TypeScript для интернет-магазина — это не безумие
Первая мысль, которая приходит в голову: “TypeScript для eCommerce? Серьёзно?” Я и сам сначала скептически отнёсся. Магазины всегда строились на PHP-движках, иногда на Ruby или Python. Но потом понимаешь — а почему, собственно, нет?
Типизация в интернет-магазине — это не просто модная фишка. Когда у тебя сотни товаров, десятки атрибутов, варианты доставки, налоги по регионам и куча бизнес-правил, случайная ошибка типа может стоить реальных денег. Передал цену строкой вместо числа? Поздравляю, клиент только что купил iPhone за три рубля.
EverShop написан полностью на TypeScript — и фронтенд, и бэкенд. Это значит, что компилятор ловит большую часть глупых ошибок ещё до запуска. Работал с кодом месяц назад? Рефакторишь структуру продукта? IDE сразу покажет все места, где что-то сломалось. Магия.
Но типизация — только начало. Настоящая изюминка в архитектуре.
Модули вместо монолита (и это действительно работает)
Помню проект, где нужно было добавить простую функцию в Magento. Казалось бы — что сложного? В итоге я правил файлы в пяти разных директориях, разбирался с observers, plugins, и молился, чтобы ничего не сломать в процессе. Три дня на “простую” задачу.
EverShop пошёл другим путём. Здесь всё построено на модулях — самодостаточных блоках функциональности. Нужен каталог товаров? Подключил модуль. Нужна корзина? Ещё один модуль. Хочешь добавить свою логику работы со скидками? Пишешь свой модуль, не трогая остальное.
Звучит просто, но дьявол в деталях. В большинстве “модульных” систем модули всё равно завязаны друг на друга невидимыми нитями зависимостей. Меняешь что-то в одном месте — ломается в другом. EverShop решает это через чёткое разделение: каждый модуль объявляет свои зависимости явно, взаимодействует с другими через события и GraphQL API.
Возьмём реальный пример. Допустим, вам нужно отправлять уведомление в Slack каждый раз, когда создаётся заказ. В классических платформах вы бы полезли в ядро, искали нужный хук, надеялись, что он существует и правильно вызывается. В EverShop вы создаёте модуль, который подписывается на событие order.created
, и всё. Семь строк кода, ноль изменений в существующей базе.
GraphQL — не хайп, а решение проблемы
Когда GraphQL только появился, многие восприняли его как очередную игрушку для хипстеров. Зачем усложнять, если есть REST? Но попробуйте построить современный магазин на REST, и вы быстро столкнётесь с проблемами.
Страница товара — это не просто один эндпоинт. Вам нужна информация о продукте, его варианты, похожие товары, отзывы, наличие на складе, рекомендации. В REST это либо семь запросов, либо один раздутый эндпоинт, который возвращает тонну ненужных данных.
EverShop использует GraphQL, и это меняет правила игры. Фронтенд запрашивает ровно то, что нужно — ни больше, ни меньше. Нужен только заголовок и цена? Получишь только их. Нужна полная информация со всеми связями? Один запрос, все данные.
Но самое крутое — это расширяемость. Добавили новый модуль с рейтингом товаров? Он просто расширяет GraphQL схему, добавляя новые поля. Фронтенд может их использовать без изменения существующих запросов. Это как Lego — собираешь из блоков то, что нужно.
Две Docker-команды до первого запуска
Теория — это хорошо, но что на практике? Я решил проверить обещание про “запуск за минуты”. Скачал docker-compose файл, запустил. Пошёл налить кофе. Вернулся — работает.
Серьёзно, это было настолько просто, что я даже засомневался — а точно всё установилось? Открыл localhost:3000 — работающий магазин. Админка на /admin. База данных настроена, примеры товаров загружены, можно тестировать.
Для экспериментов это идеально. Хочешь попробовать — разворачиваешь за минуту. Не понравилось — удаляешь контейнер, никакого мусора. Понравилось — копаешь глубже, разбираешься с кодом, пишешь свои модули.
А если серьёзно — возможность быстро поднять окружение спасает тонны времени. Сколько раз я тратил день на настройку очередной CMS, прежде чем понять, что она вообще не подходит? Здесь всё по-другому: увидел, потрогал, решил.
Где это реально пригодится?
EverShop — не универсальное решение. Если вам нужен простой магазин “из коробки” с сотней готовых плагинов и темами на любой вкус, возможно, WooCommerce будет проще. Но если вы разработчик, который строит что-то под конкретный бизнес, история меняется.
Представьте агентство, которое делает магазины для клиентов. Каждый клиент уникален: кто-то хочет интеграцию с древней ERP, кто-то — хитрую систему скидок, кто-то — вообще необычную механику подбора товаров. На классических платформах каждый проект превращается в борьбу с системой. На EverShop вы пишете нужные модули на современном стеке, не ломая ядро.
Или возьмём стартап с нестандартной бизнес-моделью. Subscription-модель с товарами? Marketplace с несколькими продавцами? B2B с индивидуальными ценами? Попробуйте это реализовать в готовом решении. С EverShop вы получаете гибкую основу и строите то, что нужно.
Даже для обучения это отличный вариант. Хотите понять, как устроен современный eCommerce изнутри? Код чистый, структура логичная, можно спокойно разбираться без головной боли.
Реальность против обещаний
Конечно, не всё идеально. Проект относительно молодой — это значит, что экосистема расширений пока скромная. Нет тысяч готовых интеграций с платёжными системами и службами доставки со всего мира. Если вам нужна специфическая связка, придётся писать самим.
С другой стороны, это и преимущество. Проект ещё формируется, можно влиять на его развитие, добавлять нужные фичи, участвовать в комьюнити. GPL-лицензия даёт полную свободу — можете модифицировать как угодно, главное — делиться изменениями.
Выводы? Их нет. Есть выбор.
EverShop — это не революция в eCommerce. Это эволюция: взять современные инструменты, которыми мы уже пользуемся, и применить их там, где обычно царит легаси. TypeScript вместо PHP, React вместо jQuery, модули вместо монолита, GraphQL вместо бесконечных REST-эндпоинтов.
Подойдёт ли это вам? Зависит от задачи. Если вы ищете что-то быстрое и готовое — есть варианты проще. Если хотите контроль, гибкость и современный код, который не стыдно поддерживать — однозначно стоит попробовать.