Перейти к содержимому

Работа с ассетами

Ассеты это статические ресурсы, которые использует ваше приложение. В FSD к ассетам применяются те же принципы размещения, что и к коду. Группируйте их по сценарию использования, а не по типу, и держите их рядом с компонентами, которые их используют.

Если ассет используется только одной страницей, виджетом или фичей, храните его внутри этого слайса. Это сохраняет инкапсуляцию и делает понятным, к чему относится ассет:

  • Директорияpages/
    • Директорияhome/
      • Директорияui/
        • hero-image.jpg
        • HomePage.tsx
      • index.ts

Если в вашем UI много статических ассетов, например изображений, вы можете создать подпапку в сегменте ui:

  • Директорияpages/
    • Директорияhome/
      • Директорияui/
        • Директорияpreviews/
          • cake.jpg
          • pizza.jpg
          • …
        • HomePage.tsx
      • index.ts

Иногда ассет не является частью UI, но при этом играет важную роль в бизнес-логике. Рассмотрим пример:

  • Директорияfeatures/
    • Директорияbilling/
      • Директорияmodel/
        • invoice-template.pdf
        • create-invoice.ts
      • index.ts

Здесь invoice-template.pdf тесно связан с бизнес-логикой в create-invoice.ts. В таких случаях предпочтительнее поместить файл в сегмент model, чтобы сохранить высокую связность и локализовать изменения.

Если статический ассет используется несколько раз, вы можете переместить его в shared/ui, чтобы он был доступен всем остальным частям приложения.

  • Директорияshared/
    • Директорияui/
      • Директорияplaceholders/
        • cake.jpg
        • pizza.jpg
        • …

Тот же подход применим и к статическим ассетам, которые используются общими компонентами:

  • Директорияshared/
    • Директорияui/
      • Dropdown.tsx
      • chevron.svg

К глобальным ассетам относятся такие вещи, как глобальные стили (например, CSS reset) и шрифты. Слой app подходящее место для этих файлов, поскольку они используются только входной точкой приложения.

  • Директорияapp/
    • Директорияstyles/
      • reset.css
      • global.css
    • main.ts

Большинство бандлеров и фреймворков предусматривают папку public в корне проекта. Файлы из неё отдаются как есть, без какой-либо обработки.

Некоторые инструменты сборки, например Vite, позволяют изменить расположение папки public, а другие, например Astro, такой возможности не дают. Если ваш инструмент сборки не поддерживает такое изменение — ничего страшного. Папка public не является частью структуры FSD и не приведёт к конфликтам имён.

Тип ассетаРасположение
Ассеты конкретного слайсаВнутри слайса (например, pages/home/ui/)
Переиспользуемые иконки и изображенияshared/ui/
Глобальные стилиapp/styles/
Шрифтыapp/fonts/, public/ или app/public
Статические файлы, фавиконкаpublic/ или app/public

Придерживайтесь принципа FSD: размещайте ассеты там, где они используются, и перемещайте их в shared, только когда действительно возникает необходимость переиспользования между слайсами.