Использование Carbon Components Svelte требует соблюдения определённой структуры проекта для поддержания чистоты кода, удобства масштабирования и совместимости с экосистемой Svelte. Важно понимать, как организовать файлы, компоненты и стили, чтобы проект оставался поддерживаемым.
Стандартная структура проекта на Svelte с интеграцией Carbon Components может выглядеть следующим образом:
my-svelte-app/
├─ public/
│ ├─ global.css
│ └─ favicon.png
├─ src/
│ ├─ components/
│ │ ├─ Button.svelte
│ │ ├─ Modal.svelte
│ │ └─ FormInput.svelte
│ ├─ routes/
│ │ ├─ Home.svelte
│ │ ├─ About.svelte
│ │ └─ Contact.svelte
│ ├─ stores/
│ │ └─ userStore.js
│ ├─ App.svelte
│ └─ main.js
├─ package.json
├─ svelte.config.js
└─ tailwind.config.js (при использовании Tailwind)
Описание ключевых папок:
public/ — содержит статические ресурсы, доступные
напрямую через URL. Обычно сюда помещают глобальные стили, изображения и
фавиконы.src/components/ — директория для переиспользуемых
компонентов. Каждый компонент Svelte, особенно на базе Carbon, хранится
в отдельном файле. Название файлов обычно совпадает с названием
компонента.src/routes/ — содержит страницы приложения. В случае
использования SvelteKit каждая страница соответствует маршруту.src/stores/ — хранит глобальные состояния приложения
через writable или readable из Svelte.Каждый компонент Carbon Components Svelte имеет структурное разделение:
<script>
import { Button, Modal } from 'carbon-components-svelte';
let modalOpen = false;
</script>
<Button kind="primary" on:click={() => modalOpen = true}>
Открыть модальное окно
</Button>
<Modal bind:open={modalOpen} modalLabel="Пример">
<p>Содержимое модального окна</p>
</Modal>
Carbon использует CSS-переменные и SCSS-подход. Для локальной
стилизации компонентов можно использовать <style>
внутри .svelte файла:
<style>
:global(.bx--btn--primary) {
background-color: #0f62fe;
}
</style>
Рекомендуется держать логику приложения отдельно от компонентов Carbon, чтобы обеспечить чистоту компонентов:
utils) отвечают за
состояние и обработку данных.Пример структуры:
src/
├─ components/
│ └─ UserForm.svelte
├─ stores/
│ └─ userStore.js
└─ utils/
└─ validation.js
UserForm.svelte использует store для управления состоянием формы:
<script>
import { userStore } from '../stores/userStore.js';
import { TextInput, Button } from 'carbon-components-svelte';
let username = '';
function submitForm() {
userStore.addUser({ username });
username = '';
}
</script>
<TextInput bind:value={username} labelText="Имя пользователя" />
<Button on:click={submitForm}>Добавить пользователя</Button>
Button.svelte,
ModalWindow.svelte).userStore.js,
validation.js).components,
routes, stores, utils).components для модульного деления,
например:components/
├─ Buttons/
│ ├─ PrimaryButton.svelte
│ └─ SecondaryButton.svelte
├─ Forms/
│ ├─ UserForm.svelte
│ └─ LoginForm.svelte
Carbon Components Svelte требует импорта базовых стилей Carbon.
Обычно это делается в main.js или
App.svelte:
import 'carbon-components-svelte/css/all.css';
Если проект использует SCSS или Tailwind, можно
подключать их в глобальном файле global.css или
app.scss, сохраняя совместимость с Carbon.
.svelte файле.stores и
utils.components по функциональным блокам.Эта структура позволяет масштабировать проект, обеспечивать повторное использование компонентов, чистоту кода и быстро адаптироваться к изменениям требований при работе с Carbon Components Svelte.