Розробка інтернет-магазина на Medusa.js
Medusa — Node.js e-commerce фреймворк з відкритим вихідним кодом, альтернатива Shopify для розробників. Версія 2.x (випущена 2024) повністю переписана: модульна архітектура на основі Medusa Modules, новий IoC-контейнер, покращений workflow-engine. Стек: TypeScript, Node.js 20+, PostgreSQL, Redis.
Архітектура Medusa 2.x
На відміну від монолітної v1, Medusa 2.x будується на незалежних модулях:
┌─────────────────────────────┐
│ Medusa Application │
├─────────────┬───────────────┤
│ HTTP Layer │ Workflows │
├─────────────┴───────────────┤
│ Module Container │
├──────┬───────┬────────┬─────┤
│Product Module│ Order │ Cart│
├──────┴───────┴────────┴─────┤
│ Infrastructure Layer │
│ PostgreSQL + Redis + S3 │
└─────────────────────────────┘
Кожен модуль — незалежний пакет зі власною схемою, сервісами, подіями. Дозволяє замінювати окремі частини.
Продукти та варіанти
Структура товарів через ієрархію: Product → ProductVariant → Price:
const product = await productModuleService.createProducts({
title: 'Куртка зимова',
handle: 'kurtka-zimnya',
status: ProductStatus.PUBLISHED,
options: [
{ title: 'Розмір', values: ['S', 'M', 'L', 'XL'] },
{ title: 'Колір', values: ['Чорний', 'Синій'] },
],
variants: [
{
title: 'S / Чорний',
sku: 'JACKET-S-BLACK',
options: { Розмір: 'S', Колір: 'Чорний' },
prices: [{ amount: 299900, currency_code: 'rub' }],
},
],
});
Workflows та бізнес-логіка
Workflows — саги з компенсаціями та rollback:
const validateInventoryStep = createStep(
'validate-inventory',
async ({ variantId, quantity }, context) => {
const inventoryService = context.container.resolve('inventory');
const available = await inventoryService.retrieveAvailableQuantity(variantId);
if (available < quantity) throw new Error(`Недостатньо: ${available} доступно`);
return new StepResponse({ available });
}
);
export const customOrderWorkflow = createWorkflow(
'custom-order-workflow',
function (input) {
const { available } = validateInventoryStep(input);
return new WorkflowResponse({ available });
}
);
Платіжні шлюзи
Підтримує Stripe, PayPal, кастомні провайдери, які розширюють AbstractPaymentProvider.
Деплой
Docker compose з PostgreSQL, Redis, worker процесом:
services:
medusa:
build: .
environment:
NODE_ENV: production
DATABASE_URL: postgresql://user:pass@postgres:5432/medusa
command: npx medusa db:migrate && npx medusa start
medusa-worker:
build: .
environment:
MEDUSA_WORKER_MODE: worker
command: npx medusa start
Терміни розробки
- Базовий магазин: Medusa + Next.js starter: 3–4 тижні
- Кастомні модулі, інтеграції CRM/ERP: 8–14 тижнів
- Headless enterprise з кількома регіонами: 16–24 тижні







