Розробка кастомного плагіна Medusa.js
У Medusa 2.x поняття «плагін» трансформувалось в Medusa Module — незалежний пакет зі власними моделями, сервісами, міграціями. Плагіни можуть публікуватися в npm та підключатися в medusa-config.ts. Це відрізняє підхід від v1, де плагіни були більше монолітні.
Структура кастомного модуля
packages/my-module/
├── src/
│ ├── index.ts # Точка входу
│ ├── models/ # MikroORM сутності
│ │ └── custom-item.ts
│ ├── services/ # Бізнес-логіка
│ ├── migrations/ # DB міграції
│ └── types/ # TypeScript типи
└── dist/ # Скомпільований JS
Визначення моделі
const CustomItem = model.define('custom_item', {
id: model.id().primaryKey(),
name: model.text(),
sku: model.text().unique(),
metadata: model.json().nullable(),
is_active: model.boolean().default(true),
created_at: model.dateTime(),
updated_at: model.dateTime(),
});
Сервіс модуля
class CustomItemModuleService extends MedusaService({
CustomItem,
}) {
async listActiveByProduct(productId: string) {
return await this.listCustomItems({
product_id: productId,
is_active: true,
});
}
}
Точка входу модуля
import { Module } from '@medusajs/framework/utils';
import CustomItemModuleService from './services/custom-item';
export const CUSTOM_ITEM_MODULE = 'customItem';
export default Module(CUSTOM_ITEM_MODULE, {
service: CustomItemModuleService,
});
Підключення в medusa-config.ts
export default defineConfig({
modules: [
{
resolve: './packages/my-module/src',
options: {
apiEndpoint: process.env.CUSTOM_API_ENDPOINT,
},
},
],
});
Терміни розробки
- Простий модуль з CRUD та API-роутами: 2–4 дні
- Модуль з інтеграцією зовнішнього API: 5–10 днів
- Складний модуль з workflows та міграціями: 2–3 тижні







