Структура файлов проекта

Проект на фреймворке Marko состоит из нескольких ключевых компонентов, которые помогают организовать и управлять разработкой веб-приложений. Важным аспектом является правильная структура файлов, которая обеспечивает удобство работы и упрощает масштабируемость.

Основные каталоги проекта

  1. src/ – каталог исходных файлов, в котором находится вся логика и структура приложения. Все основные компоненты, шаблоны, стили и JavaScript-код размещаются здесь.

    • components/ – здесь находятся все компоненты, написанные с использованием Marko. Каждый компонент представляет собой набор шаблонов и логики, и обычно хранится в отдельной папке.
    • layouts/ – папка для размещения шаблонов макетов. Макеты — это компоненты, которые обычно используют другие компоненты для создания основной структуры страницы.
    • views/ – файлы, отвечающие за представление и обработку данных, передаваемых в шаблоны.
    • assets/ – статичные ресурсы, такие как изображения, стили, шрифты и другие файлы, доступные для загрузки на клиенте.
  2. public/ – каталог для публичных файлов, которые могут быть доступными через URL, например, изображения, шрифты или другие статические ресурсы, которые не нуждаются в обработке со стороны сервера.

  3. node_modules/ – стандартная папка для всех зависимостей проекта. Здесь хранятся библиотеки и модули, установленные через менеджер пакетов npm.

  4. build/ – каталог, в который помещаются скомпилированные файлы для финальной сборки проекта. Эти файлы готовы к развертыванию на сервере или в продакшн-среде.

  5. config/ – конфигурационные файлы проекта. Здесь могут находиться настройки сборщика, параметры сервера, а также другие конфигурации, которые управляют поведением приложения.

  6. tests/ – папка с тестами, которая содержит юнит-тесты и интеграционные тесты для компонентов и функционала проекта.

Структура компонента Marko

Каждый компонент Marko состоит из нескольких файлов, которые обеспечивают его работоспособность. Основной компонент представляет собой файл с расширением .marko. Вот как выглядит типичная структура компонента:

component/
    ├── component.marko      // основной шаблон компонента
    ├── component.js         // файл с логикой компонента (optional)
    ├── component.css        // стили компонента (optional)
    └── component.test.js    // тесты для компонента (optional)
  1. component.marko – основной файл компонента, содержащий шаблон, который Marko компилирует в HTML. Шаблон может содержать как статическую разметку, так и динамическую логику, такую как условные конструкции, циклы, передача параметров и т. д.

    Пример:

    <div>
      <h1>Hello, ${input.name}!</h1>
    </div>
  2. component.js – файл с JavaScript-кодом, который содержит логику компонента, например, обработчики событий, методы и жизненный цикл компонента. Этот файл не обязателен, если компонент не требует дополнительной логики.

    Пример:

    module.exports = {
      onInput(input) {
        this.name = input.name || 'World';
      }
    };
  3. component.css – файл стилей, применяемых к компоненту. Это не обязательный файл, но он полезен, если компонент требует специфичных стилей. В Marko поддерживаются как обычные CSS, так и предобработанные стили (например, SCSS).

  4. component.test.js – файл с тестами для компонента. Это optional, но рекомендуется создавать тесты для проверки корректности работы компонентов.

Разделение шаблонов и логики

Marko поддерживает разделение логики и представления. Логика компонента находится в JavaScript-файле, а разметка — в шаблонном файле. Это позволяет поддерживать чистоту и разделение ответственности в проекте, а также упростить тестирование, так как логику можно протестировать отдельно от разметки.

Интеграция с сервером

Marko обычно используется в качестве фреймворка для рендеринга на сервере. В таких проектах серверная логика обычно разделяется на два типа:

  1. Серверная логика — обрабатывает запросы и рендерит компоненты на сервере. Это может быть сделано через Express, Koa или другие серверные фреймворки.

  2. Клиентская логика — после рендеринга страницы на сервере, данные могут быть переданы на клиентскую сторону для интерактивности и обновлений без полной перезагрузки страницы (используется реактивность Marko). В Marko поддерживаются как серверный, так и клиентский рендеринг компонентов.

Разделение на страницы и компоненты

В некоторых проектах на Marko удобно выделять страницы, которые являются контейнерами для компонентов. Эти страницы могут использоваться как роуты, отвечающие за различные части приложения. Каждая страница может включать в себя несколько компонентов, создавая таким образом модульную структуру.

Пример:

pages/
    ├── home.marko        // страница "домашняя"
    ├── about.marko       // страница "о нас"
    ├── contact.marko     // страница "контакты"
    └── page.js           // общая логика для страниц

Использование макетов

В Marko макеты предоставляют общий каркас для страниц. Это позволяет повторно использовать общие элементы на разных страницах, например, хедеры, футеры или навигацию. Макет может быть использован в каждом компоненте, который наследует от базового шаблона.

Пример:

<layout>
    <header>Header content</header>
    <main>${input.content}</main>
    <footer>Footer content</footer>
</layout>

Организация стилей

Стили в Marko могут быть разделены на два типа: глобальные и локальные. Глобальные стили применяются ко всему приложению, а локальные — только к отдельным компонентам. Для организации стилей рекомендуется использовать CSS-модули или аналогичные технологии, чтобы избежать конфликтов стилей между компонентами.

Разделение логики и представления

При разработке на Marko важно соблюдать принцип разделения логики и представления. Это позволяет поддерживать структуру проекта в чистоте и упростить его развитие. Шаблоны и JavaScript-код должны быть как можно более изолированы, что поможет легче масштабировать проект, а также упростит тестирование отдельных частей системы.

Тестирование компонентов

Одной из лучших практик является создание тестов для компонентов. Это позволяет убедиться в правильности работы каждого отдельного компонента и всей системы в целом. В Marko можно использовать стандартные библиотеки для тестирования, такие как Jest или Mocha, в сочетании с инструментами для рендеринга шаблонов.

Заключение

Правильная организация структуры файлов в проекте на Marko помогает не только в разработке, но и в масштабировании приложения, обеспечивая чистоту и поддерживаемость кода. Разделение компонентов, стилей и логики позволяет эффективно работать над проектом в команде и интегрировать новые функции без ущерба для производительности и качества кода.