Astro
DMA с корнем композиции в pages/ и frontmatter-импортами.
Пример для Astro 5: слои под src/, корень композиции в src/pages/, layout и providers в src/app/.
Исходники: examples/astro-pages.
Два корня: pages и app
| Папка | Роль |
|---|---|
src/pages/ | Роуты — тонкие, только монтирование |
src/app/ | Layout, providers, начальные данные — не роуты |
В pages/ — только routable файлы (index.astro). layout.astro и shop-providers.astro живут в app/, чтобы Astro не создавал лишние маршруты.
Тонкий route
---
import CatalogPage from "@/features/catalog/public/catalog-page.astro";
import ShopProviders from "@/app/shop-providers.astro";
import Layout from "@/app/layout.astro";
---
<Layout title="DMA · Astro mini-shop">
<ShopProviders>
<CatalogPage />
</ShopProviders>
</Layout>Импорты только вниз: features/*/public/*, services/*/public/*, shared/*.
Frontmatter = module script
Блок --- выполняется на build time:
- Импортируйте
*/public/*и стадия-0 модули - Вызывайте service helpers до template
- Передавайте данные в child через props
dma check и Biome plugin парсят импорты из .astro frontmatter так же, как из .ts.
Provider pattern
shop-providers.astro биндит порт до рендера features:
---
import { provideCartSeed } from "@/services/cart/public/ports";
import { demoCartSeed } from "@/app/cart-seed";
provideCartSeed(demoCartSeed);
---
<slot />Порты невидимы для статического графа — используйте для начальных данных / разрыва цикла, не для обхода promotion. Подробнее — Склейка модулей.
State patterns
- Размещённый рядом store —
catalog.store.ts, импорт relative изpublic/ - Promoted service —
services/cart/public/cart.ts(catalog + checkout) - Provider port —
ports.ts+ привязка вapp/
Куда класть код
| Задача | Папка |
|---|---|
| Route shell | src/pages/*.astro |
| Layout, providers | src/app/ |
| Feature screen | features/<name>/public/<entry>.astro |
| Stage-0 module | features/<name>.astro |
| 2+ consumers | services/<name>/public/ |
| Portable UI/lib | shared/ui/, shared/lib/ |
Стили
| Вид | Где |
|---|---|
Scoped <style> | В том же .astro файле |
| Feature CSS | размещённый рядом *.css → import из public/ |
| CSS Modules | public/*.module.css |
| Global | styles/global.css → import из app/layout.astro |
Global CSS — только из корня композиции.
Инструменты
bun run build # astro build
bun run dma-check # dma check .
bun run lint # biome + @derived-modular/biome-plugin
bun run testBiome plugin — приблизительный (GritQL). Нет полного разрешения путей и циклов графа. Всегда dma check в CI.