Структура Svelte проекта и файловая организация

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

Инициализация проекта

Для создания нового проекта с использованием Svelte, рекомендуется воспользоваться официальным шаблоном, который позволяет настроить все необходимые зависимости и структуру файлов. Для этого необходимо выполнить команду:

npx degit sveltejs/template имя_проекта
cd имя_проекта
npm install

Эта команда создаст новый проект и установит все нужные зависимости. После инициализации проект будет содержать несколько базовых файлов и папок, которые можно использовать и модифицировать по мере необходимости.

Основные каталоги и файлы

Стандартная структура Svelte проекта выглядит следующим образом:

имя_проекта/
├── public/
│   ├── global.css
│   └── index.html
├── src/
│   ├── assets/
│   ├── components/
│   ├── routes/
│   └── main.js
├── .gitignore
├── package.json
└── rollup.config.js

Папка public

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

  • index.html — главный HTML файл, куда будет вставлен скомпилированный JavaScript-код приложения.
  • global.css — глобальные стили, которые применяются ко всему приложению. Это не обязательный файл, но его наличие позволяет централизованно задать стили для всего приложения.

Папка src

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

  • assets/ — папка для хранения медиафайлов (изображений, шрифтов, иконок и прочих статических ресурсов), которые могут использоваться в компонентах и страницах.
  • components/ — директория, в которой размещаются Svelte компоненты. Каждый компонент представляет собой файл с расширением .svelte, который описывает логику, разметку и стили для определённого элемента интерфейса.
  • routes/ — папка для организации маршрутов, если проект использует маршрутизатор (например, svelte-routing). Каждый файл в этой папке представляет собой отдельный маршрут с компонентами, связанными с этим маршрутом.
  • main.js — главный файл, с которого начинается работа приложения. В этом файле происходит инициализация приложения и подключение к HTML-документу.

Файл rollup.config.js

Этот файл конфигурации относится к сборщику модулей Rollup, который используется по умолчанию в проекте Svelte. Он определяет, как будет происходить сборка приложения, какие плагины использовать и как настраивать оптимизацию, код-сплиттинг и другие параметры. Обычно этот файл не требует изменений, если проект не выходит за пределы стандартных настроек, но его можно модифицировать для добавления новых возможностей, например, поддержки TypeScript или внедрения специфических плагинов.

Файл package.json

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

Пример базового package.json:

{
  "name": "svelte-app",
  "version": "1.0.0",
  "scripts": {
    "dev": "rollup -c -w",
    "build": "rollup -c",
    "start": "sirv public --no-clear"
  },
  "devDependencies": {
    "rollup": "^2.60.0",
    "rollup-plugin-svelte": "^7.1.0",
    "rollup-plugin-terser": "^7.0.2",
    "svelte": "^3.44.0",
    "sirv-cli": "^1.0.0"
  }
}

Размещение компонентов

В Svelte компоненты играют ключевую роль в структуре проекта. Компоненты можно размещать в папке src/components, и каждый компонент представляет собой файл с расширением .svelte. Внутри компонента описываются три секции:

  1. Секция скрипта (<script>): содержит логику компонента, включая переменные, функции, события и экспортированные свойства.
  2. Секция стилей (<style>): содержит стили для компонента. Эти стили инкапсулированы и применяются только к данному компоненту, что позволяет избежать конфликтов с другими частями приложения.
  3. Секция разметки (HTML): определяет внешний вид компонента. Это стандартный HTML-код, с возможностью использования синтаксиса Svelte для привязки данных и событий.

Пример компонента:

<script>
  let count = 0;

  function increment() {
    count += 1;
  }
</script>

<style>
  button {
    padding: 10px;
    font-size: 16px;
  }
</style>

<button on:click={increment}>Clicked {count} times</button>

Организация маршрутов

Svelte не предоставляет встроенного маршрутизатора, но для работы с маршрутами можно использовать сторонние библиотеки, такие как svelte-routing или svelte-navigator. Структура маршрутов обычно организуется через папку src/routes, где каждый файл или папка представляет собой отдельный маршрут.

Пример использования svelte-routing для организации маршрутов:

<script>
  import { Router, Route, Link } from 'svelte-routing';
  import Home from './routes/Home.svelte';
  import About from './routes/About.svelte';
</script>

<Router>
  <nav>
    <Link to="/">Home</Link>
    <Link to="/about">About</Link>
  </nav>

  <Route path="/" component={Home} />
  <Route path="/about" component={About} />
</Router>

Пример структуры более сложного проекта

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

Пример:

имя_проекта/
├── public/
│   ├── global.css
│   └── index.html
├── src/
│   ├── assets/
│   ├── components/
│   ├── routes/
│   ├── services/
│   ├── store/
│   └── utils/
├── tests/
│   ├── components/
│   └── services/
├── package.json
└── rollup.config.js

Важные моменты

  • Модульность компонентов. Каждый компонент в Svelte инкапсулирует свою логику, разметку и стили, что упрощает поддержку и повторное использование.
  • Структура маршрутов. Для небольших проектов можно обойтись простой организацией, однако для крупных приложений необходимо использовать более сложные схемы маршрутизации и деление логики на страницы и компоненты.
  • Использование хранилища. Для управления состоянием приложения можно использовать встроенные возможности Svelte, такие как writable, readable или derived хранилища, для централизованного управления состоянием.

Правильная организация файлов и папок позволяет сохранить порядок в проекте, ускоряет разработку и облегчает поддержку.